diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9270194 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,1319 @@ +root = true + +############################### +# Core EditorConfig Options # +############################### +# All files +[*] +indent_style = space +trim_trailing_whitespace = false + +# Front-end dev +[*.{tsx,ts,js,jsx,json,css,scss,sass}] +max_line_length = 130 +quote_type = single + +# Back-end dev +[*.{cs,csx,vb,vbx}] +max_line_length = 130 + +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] + +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] + +# dot rc config files +[.*rc] + +# Migrations +[**/Migrations/*] +generated_code = true + +############################ +# .NET Coding Conventions # +############################ +# See rules documentation - https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/language-rules +# Based on: https://github.com/dotnet/roslyn-analyzers/blob/master/.editorconfig + +[*.{cs,vb}] + +# Organize usings +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true + +# this. preferences + +# Language keywords vs BCL types preferences + +# Parentheses preferences +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# Modifier preferences + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:warning + +# Expression-level preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_object_initializer = true:suggestion +dotnet_style_prefer_auto_properties = true:suggestion +dotnet_style_prefer_compound_assignment = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion + + +########################### +# Naming Conventions # +########################### + +# Style Definitions +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# Use PascalCase for constant fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const + +# Instance fields are camelCase and start with _ +# https://github.com/dotnet/roslyn/blob/c9aa4bee022f2c03f741842432cbf563183d9c2c/.editorconfig#L110 +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style +dotnet_naming_symbols.instance_fields.applicable_kinds = field +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + + +########################### +# C# Coding Conventions # +########################### +# See rules documentation - https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/language-rules +# Based on: https://github.com/dotnet/roslyn-analyzers/blob/master/.editorconfig + +[*.cs] + +# var preferences + +# Expression-bodied members +csharp_style_expression_bodied_methods = true:suggestion +csharp_style_expression_bodied_constructors = true:suggestion +csharp_style_expression_bodied_operators = true:suggestion +csharp_style_expression_bodied_properties = true:suggestion +csharp_style_expression_bodied_indexers = true:suggestion +csharp_style_expression_bodied_accessors = true:suggestion + +# IDE0160: Convert to file-scoped namespace +csharp_style_namespace_declarations = file_scoped:none + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion + +# Null-checking preferences +csharp_style_conditional_delegate_call = true:suggestion + +# Modifier preferences +csharp_prefer_static_local_function = true:suggestion + +# Code-block preferences +csharp_prefer_braces = true:warning +csharp_prefer_simple_using_statement = true:warning + +# Expression-level preferences +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:silent + + +########################### +# C# Formatting Rules # +########################### + +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = flush_left +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true + + +########################################### +# Default severity for NET Analyzer rules # +########################################### +# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/overview#enable-on-build + +[*] + +# Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings) +dotnet_analyzer_diagnostic.category-style.severity = warning + +# Default severity for all IDE code quality rules with category 'CodeQuality' (escalated to build warnings) +dotnet_analyzer_diagnostic.category-codequality.severity = warning + + +########################### +# Code Style # +########################### + +dotnet_diagnostic.asp0020.severity = none + +# IDE0005: Remove unnecessary import +dotnet_diagnostic.ide0005.severity = suggestion + +# IDE0007: Use 'var' instead of explicit type +dotnet_diagnostic.ide0007.severity = none + +# IDE0008: Use explicit type instead of 'var' +dotnet_diagnostic.ide0008.severity = suggestion + +# IDE0010: Add missing cases in switch statement +dotnet_diagnostic.ide0010.severity = suggestion + +# IDE0021: Use expression body for constructors +dotnet_diagnostic.ide0021.severity = none + +# IDE0050: Convert anonymous type to tuple +dotnet_diagnostic.ide0050.severity = suggestion + +# IDE0055: Fix formatting +dotnet_diagnostic.ide0055.severity = error + +# IDE0058: Remove unnecessary expression value / csharp_style_unused_value_expression_statement_preference +dotnet_diagnostic.ide0058.severity = none + +# IDE0063: Use simple 'using' statement / csharp_prefer_simple_using_statement +dotnet_diagnostic.ide0063.severity = suggestion + +# IDE0066: Convert switch statement to expression +dotnet_diagnostic.ide0066.severity = suggestion + +# IDE0071: Simplify interpolation / dotnet_style_prefer_simplified_interpolation +dotnet_diagnostic.ide0071.severity = suggestion + +# IDE1006: Naming rule violation +dotnet_diagnostic.ide1006.severity = error + + +########################### +# Compiler Messages # +########################### + +# CS0168: Compiler Warning (level 3) - The variable 'var' is declared but never used +dotnet_diagnostic.cs0168.severity = error + +# CS0219: Compiler Warning (level 3) - The variable 'variable' is assigned but its value is never used +dotnet_diagnostic.cs0219.severity = error + +# CS0618: Usage of Obsolette methods +dotnet_diagnostic.cs0618.severity = none + +# CS1591: Compiler Warning (level 4) - Missing XML comment for publicly visible type or member +dotnet_diagnostic.cs1591.severity = none + +# CS8019: Unnecessary using directive +dotnet_diagnostic.cs8019.severity = suggestion + +#========================== +# Nullable Reference types +#========================== +# CS8600: Converting null literal or possible null value to non-nullable type. +dotnet_diagnostic.cs8600.severity = none + +# CS8602: Dereference of a possibly null reference. +dotnet_diagnostic.cs8601.severity = none + +# CS8602: Dereference of a possibly null reference. +dotnet_diagnostic.cs8602.severity = none + +# CS8603: Possible null reference return. +dotnet_diagnostic.cs8603.severity = none + +# CS8604: Possible null reference argument. +dotnet_diagnostic.cs8604.severity = none + +# CS8605: Unboxing a possibly null value. +dotnet_diagnostic.cs8605.severity = error + +# CS8606: Possible null reference assignment to iteration variable +dotnet_diagnostic.cs8606.severity = error + +# CS8607: A possible null value may not be passed to a target marked with the [DisallowNull] attribute +dotnet_diagnostic.cs8607.severity = error + +# CS8608: Nullability of reference types in type doesn't match overridden member. +dotnet_diagnostic.cs8608.severity = error + +# CS8609: Nullability of reference types in return type doesn't match overridden member. +dotnet_diagnostic.cs8609.severity = error + +# CS8610: Nullability of reference types in type of parameter doesn't match overridden member. +dotnet_diagnostic.cs8610.severity = error + +# CS8611: Nullability of reference types in type of parameter doesn't match partial method declaration. +dotnet_diagnostic.cs8611.severity = error + +# CS8612: Nullability of reference types in type doesn't match implicitly implemented member. +dotnet_diagnostic.cs8612.severity = error + +# CS8613: Nullability of reference types in return type doesn't match implicitly implemented member. +dotnet_diagnostic.cs8613.severity = error + +# CS8614: Nullability of reference types in type of parameter doesn't match implicitly implemented member. +dotnet_diagnostic.cs8614.severity = error + +# CS8615: Nullability of reference types in type doesn't match implemented member. +dotnet_diagnostic.cs8615.severity = error + +# CS8616: Nullability of reference types in return type doesn't match implemented member. +dotnet_diagnostic.cs8616.severity = error + +# CS8617: Nullability of reference types in type of parameter doesn't match implemented member. +dotnet_diagnostic.cs8617.severity = error + +# CS8618: Non-nullable property 'LastName' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. +dotnet_diagnostic.cs8618.severity = error + +# CS8619: Nullability of reference types in value doesn't match target type. +dotnet_diagnostic.cs8619.severity = error + +# CS8620: Argument cannot be used for parameter due to differences in the nullability of reference types. +dotnet_diagnostic.cs8620.severity = error + +# CS8621: Nullability of reference types in return type doesn't match the target delegate. +dotnet_diagnostic.cs8621.severity = error + +# CS8622: Nullability of reference types in type of parameter doesn't match the target delegate. +dotnet_diagnostic.cs8622.severity = error + +# CS8624: Argument cannot be used as an output for parameter due to differences in the nullability of reference types. +dotnet_diagnostic.cs8624.severity = error + +# CS8625: Cannot convert null literal to non-nullable reference type. +dotnet_diagnostic.cs8625.severity = error + +# CS8626: The 'as' operator may produce a null value for a type parameter. +dotnet_diagnostic.cs8626.severity = error + +# CS8629: Nullable value type may be null. +dotnet_diagnostic.cs8629.severity = error + +# CS8631: The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn't match constraint type. +dotnet_diagnostic.cs8631.severity = error + +# CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. +dotnet_diagnostic.cs8632.severity = error + +# CS8633: Nullability in constraints for type parameter doesn't match the constraints for type parameter in implicitly implemented interface method. +dotnet_diagnostic.cs8633.severity = error + +# CS8634: The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn't match 'class' constraint. +dotnet_diagnostic.cs8634.severity = error + +# CS8638: Conditional access may produce a null value for a type parameter. +dotnet_diagnostic.cs8638.severity = error + +# CS8643: Nullability of reference types in explicit interface specifier doesn't match interface implemented by the type. +dotnet_diagnostic.cs8643.severity = error + +# CS8644: Type does not implement interface member. Nullability of reference types in interface implemented by the base type doesn't match. +dotnet_diagnostic.cs8644.severity = error + +# CS8645: Interface is already listed in the interface list with different nullability of reference types. +dotnet_diagnostic.cs8645.severity = error + +# CS8653: A default expression introduces a null value for a type parameter. +dotnet_diagnostic.cs8653.severity = error + +# CS8654: A null literal introduces a null value for a type parameter. +dotnet_diagnostic.cs8654.severity = error + +# CS8655: The switch expression does not handle some null inputs. +dotnet_diagnostic.cs8655.severity = error + +# CS8667: Partial method declarations have inconsistent nullability in constraints for type parameter +dotnet_diagnostic.cs8667.severity = error + +# CS8714: The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn't match 'notnull' constraint. +dotnet_diagnostic.cs8714.severity = error + + +########################### +# Code Quality # +########################### + +# Default analyzed API surface = 'all' (public APIs + non-public APIs) +dotnet_code_quality.api_surface = all + +# CA1002: Do not expose generic lists +dotnet_diagnostic.ca1002.severity = suggestion + +# CA1024: Use properties where appropriate +dotnet_diagnostic.ca1024.severity = suggestion + +# CA1033: Interface methods should be callable by child types +dotnet_diagnostic.ca1033.severity = suggestion + +# CA1043: Use integral or string argument for indexers +# Restrict the analyzed API surface for certain analyzers to 'public' (public APIs only). +dotnet_code_quality.ca1043.api_surface = public + +# CA1062: Validate arguments of public/protected methods +# An externally visible method dereferences one of its reference arguments without verifying whether that argument is null +# This predates the Nullable Reference Type language features. +dotnet_diagnostic.ca1062.severity = none + +# CA1303: Do not pass literals as localized parameters +dotnet_diagnostic.ca1303.severity = none + +# CA1307: Specify StringComparison for clarity +dotnet_diagnostic.ca1307.severity = suggestion + +# CA1309: Use ordinal string comparison +dotnet_diagnostic.ca1309.severity = suggestion + +# CA1707: Identifiers should not contain underscores +dotnet_code_quality.ca1707.api_surface = public + +# CA1711: Identifiers should not have incorrect suffix +dotnet_diagnostic.ca1711.severity = suggestion + +# CA1715: Identifiers should have correct prefix +# But exclude single letter type parameter names +dotnet_code_quality.ca1715.exclude_single_letter_type_parameters = true + +# CA1720: Identifiers should not contain type names +dotnet_code_quality.ca1720.api_surface = public + +# CA1725: Parameter names should match base declaration +dotnet_diagnostic.ca1725.severity = suggestion + +# CA1801: Unused parameters / IDE0060 / RCS1163 +dotnet_diagnostic.ca1801.severity = suggestion + +# CA2227: Collection properties should be read only +dotnet_diagnostic.ca2227.severity = suggestion + + +########################### +# Roslynator Analysers # +########################### + +# Formatting analyzers (RCS0xxx) - http://pihrt.net/Roslynator/Analyzers?Query=RCS0 + +# Common analyzers (RCS1xxx) - http://pihrt.net/Roslynator/Analyzers?Query=RCS1 +dotnet_diagnostic.rcs1007.severity = error + +# Covered by IDE0007 +# RCS1010: Use 'var' instead of explicit type +dotnet_diagnostic.rcs1010.severity = none + +dotnet_diagnostic.rcs1013.severity = error +dotnet_diagnostic.rcs1014.severity = error +dotnet_diagnostic.rcs1015.severity = error +dotnet_diagnostic.rcs1019.severity = error +dotnet_diagnostic.rcs1020.severity = error +dotnet_diagnostic.rcs1021.severity = error +dotnet_diagnostic.rcs1024.severity = error +dotnet_diagnostic.rcs1027.severity = error +dotnet_diagnostic.rcs1028.severity = error +dotnet_diagnostic.rcs1032.severity = error +dotnet_diagnostic.rcs1033.severity = error +dotnet_diagnostic.rcs1035.severity = none +dotnet_diagnostic.rcs1036.severity = error +dotnet_diagnostic.rcs1037.severity = error +dotnet_diagnostic.rcs1038.severity = error +dotnet_diagnostic.rcs1039.severity = error +dotnet_diagnostic.rcs1040.severity = error +dotnet_diagnostic.rcs1041.severity = error +dotnet_diagnostic.rcs1044.severity = error +dotnet_diagnostic.rcs1045.severity = error +dotnet_diagnostic.rcs1046.severity = error +dotnet_diagnostic.rcs1047.severity = error +dotnet_diagnostic.rcs1048.severity = error +dotnet_diagnostic.rcs1049.severity = error +dotnet_diagnostic.rcs1052.severity = error +dotnet_diagnostic.rcs1055.severity = error +dotnet_diagnostic.rcs1057.severity = error +dotnet_diagnostic.rcs1058.severity = error +dotnet_diagnostic.rcs1059.severity = error +dotnet_diagnostic.rcs1061.severity = error +dotnet_diagnostic.rcs1062.severity = error +dotnet_diagnostic.rcs1063.severity = error +dotnet_diagnostic.rcs1064.severity = error +dotnet_diagnostic.rcs1066.severity = error +dotnet_diagnostic.rcs1068.severity = error +dotnet_diagnostic.rcs1069.severity = error +dotnet_diagnostic.rcs1070.severity = error +dotnet_diagnostic.rcs1071.severity = error +dotnet_diagnostic.rcs1072.severity = error +dotnet_diagnostic.rcs1073.severity = error +dotnet_diagnostic.rcs1074.severity = error +dotnet_diagnostic.rcs1075.severity = error +dotnet_diagnostic.rcs1076.severity = error +dotnet_diagnostic.rcs1077.severity = error +dotnet_diagnostic.rcs1079.severity = error +dotnet_diagnostic.rcs1081.severity = error +dotnet_diagnostic.rcs1084.severity = error +dotnet_diagnostic.rcs1085.severity = error +dotnet_diagnostic.rcs1088.severity = error +dotnet_diagnostic.rcs1091.severity = error +dotnet_diagnostic.rcs1093.severity = error +dotnet_diagnostic.rcs1094.severity = error +dotnet_diagnostic.rcs1097.severity = error +dotnet_diagnostic.rcs1098.severity = error +dotnet_diagnostic.rcs1099.severity = error +dotnet_diagnostic.rcs1103.severity = error +dotnet_diagnostic.rcs1104.severity = error +dotnet_diagnostic.rcs1105.severity = error +dotnet_diagnostic.rcs1106.severity = error +dotnet_diagnostic.rcs1107.severity = error +dotnet_diagnostic.rcs1110.severity = error +dotnet_diagnostic.rcs1112.severity = error +dotnet_diagnostic.rcs1113.severity = error +dotnet_diagnostic.rcs1114.severity = error +dotnet_diagnostic.rcs1123.severity = error +dotnet_diagnostic.rcs1126.severity = error +dotnet_diagnostic.rcs1127.severity = error +dotnet_diagnostic.rcs1128.severity = error +dotnet_diagnostic.rcs1132.severity = error + +# RCS1138: Add summary to documentation comment +dotnet_diagnostic.rcs1138.severity = none + +# RCS1139: Add summary element to documentation comment +dotnet_diagnostic.rcs1139.severity = none + +dotnet_diagnostic.rcs1146.severity = error +dotnet_diagnostic.rcs1151.severity = error +dotnet_diagnostic.rcs1153.severity = error +dotnet_diagnostic.rcs1154.severity = error +dotnet_diagnostic.rcs1155.severity = error +dotnet_diagnostic.rcs1160.severity = error +dotnet_diagnostic.rcs1162.severity = error + +# Covered by CA1801: Unused parameters +dotnet_diagnostic.rcs1163.severity = none + +dotnet_diagnostic.rcs1164.severity = error +dotnet_diagnostic.rcs1166.severity = error + +# RCS1168: Parameter name differs from base name +dotnet_diagnostic.rcs1168.severity = suggestion + +dotnet_diagnostic.rcs1171.severity = error +dotnet_diagnostic.rcs1172.severity = error +dotnet_diagnostic.rcs1173.severity = error +dotnet_diagnostic.rcs1174.severity = error +dotnet_diagnostic.rcs1175.severity = error +dotnet_diagnostic.rcs1179.severity = error +dotnet_diagnostic.rcs1182.severity = error +dotnet_diagnostic.rcs1186.severity = error +dotnet_diagnostic.rcs1187.severity = error +dotnet_diagnostic.rcs1188.severity = error +dotnet_diagnostic.rcs1190.severity = error +dotnet_diagnostic.rcs1191.severity = error +dotnet_diagnostic.rcs1192.severity = error +dotnet_diagnostic.rcs1193.severity = error +dotnet_diagnostic.rcs1194.severity = error +dotnet_diagnostic.rcs1195.severity = error +dotnet_diagnostic.rcs1196.severity = error +dotnet_diagnostic.rcs1197.severity = error +dotnet_diagnostic.rcs1198.severity = error +dotnet_diagnostic.rcs1199.severity = error +dotnet_diagnostic.rcs1201.severity = error +dotnet_diagnostic.rcs1202.severity = error +dotnet_diagnostic.rcs1203.severity = error +dotnet_diagnostic.rcs1204.severity = error +dotnet_diagnostic.rcs1205.severity = error +dotnet_diagnostic.rcs1206.severity = error +dotnet_diagnostic.rcs1208.severity = error +dotnet_diagnostic.rcs1209.severity = error +dotnet_diagnostic.rcs1210.severity = error +dotnet_diagnostic.rcs1211.severity = error +dotnet_diagnostic.rcs1212.severity = error +dotnet_diagnostic.rcs1213.severity = error +dotnet_diagnostic.rcs1214.severity = error +dotnet_diagnostic.rcs1215.severity = error +dotnet_diagnostic.rcs1216.severity = error +dotnet_diagnostic.rcs1218.severity = error +dotnet_diagnostic.rcs1224.severity = error +dotnet_diagnostic.rcs1225.severity = error +dotnet_diagnostic.rcs1229.severity = error +dotnet_diagnostic.rcs1230.severity = error +dotnet_diagnostic.rcs1234.severity = error +dotnet_diagnostic.rcs1235.severity = error +dotnet_diagnostic.rcs1236.severity = error +dotnet_diagnostic.rcs1239.severity = error +dotnet_diagnostic.rcs1240.severity = error +dotnet_diagnostic.rcs1243.severity = error +dotnet_diagnostic.rcs1244.severity = error + + +# StyleCop.Analyzers.SpecialRules + + +# XML comment analysis disabled +dotnet_diagnostic.sa0001.severity = none + +# Invalid settings file +dotnet_diagnostic.sa0002.severity = none + +# StyleCop.Analyzers.SpacingRules + + +# Keywords should be spaced correctly +dotnet_diagnostic.sa1000.severity = warning + +# Commas should be spaced correctly +dotnet_diagnostic.sa1001.severity = warning + +# Semicolons should be spaced correctly +dotnet_diagnostic.sa1002.severity = warning + +# Symbols should be spaced correctly +dotnet_diagnostic.sa1003.severity = warning + +# Documentation lines should begin with single space +dotnet_diagnostic.sa1004.severity = warning + +# Single line comments should begin with single space +dotnet_diagnostic.sa1005.severity = warning + +# Preprocessor keywords should not be preceded by space +dotnet_diagnostic.sa1006.severity = warning + +# Operator keyword should be followed by space +dotnet_diagnostic.sa1007.severity = warning + +# Opening parenthesis should be spaced correctly +dotnet_diagnostic.sa1008.severity = warning + +# Closing parenthesis should be spaced correctly +dotnet_diagnostic.sa1009.severity = warning + +# Opening square brackets should be spaced correctly +dotnet_diagnostic.sa1010.severity = warning + +# Closing square brackets should be spaced correctly +dotnet_diagnostic.sa1011.severity = warning + +# Opening braces should be spaced correctly +dotnet_diagnostic.sa1012.severity = none + +# Closing braces should be spaced correctly +dotnet_diagnostic.sa1013.severity = none + +# Opening generic brackets should be spaced correctly +dotnet_diagnostic.sa1014.severity = warning + +# Closing generic brackets should be spaced correctly +dotnet_diagnostic.sa1015.severity = warning + +# Opening attribute brackets should be spaced correctly +dotnet_diagnostic.sa1016.severity = warning + +# Closing attribute brackets should be spaced correctly +dotnet_diagnostic.sa1017.severity = warning + +# Nullable type symbols should be spaced correctly +dotnet_diagnostic.sa1018.severity = warning + +# Member access symbols should be spaced correctly +dotnet_diagnostic.sa1019.severity = warning + +# Increment decrement symbols should be spaced correctly +dotnet_diagnostic.sa1020.severity = warning + +# Negative signs should be spaced correctly +dotnet_diagnostic.sa1021.severity = warning + +# Positive signs should be spaced correctly +dotnet_diagnostic.sa1022.severity = warning + +# Dereference and access of symbols should be spaced correctly +dotnet_diagnostic.sa1023.severity = warning + +# Colons should be spaced correctly +dotnet_diagnostic.sa1024.severity = warning + +# Code should not contain multiple whitespace in a row +dotnet_diagnostic.sa1025.severity = warning + +# Code should not contain space after new or stackalloc keyword in implicitly typed array allocation +dotnet_diagnostic.sa1026.severity = warning + +# Use tabs correctly +dotnet_diagnostic.sa1027.severity = warning + +# Code should not contain trailing whitespace +dotnet_diagnostic.sa1028.severity = warning + +# StyleCop.Analyzers.ReadabilityRules + + +# Do not prefix calls with base unless local implementation exists +dotnet_diagnostic.sa1100.severity = warning + +# Prefix local calls with this +dotnet_diagnostic.sa1101.severity = none + +# Query clause should follow previous clause +dotnet_diagnostic.sa1102.severity = warning + +# Query clauses should be on separate lines or all on one line +dotnet_diagnostic.sa1103.severity = none + +# Query clause should begin on new line when previous clause spans multiple lines +dotnet_diagnostic.sa1104.severity = none + +# Query clauses spanning multiple lines should begin on own line +dotnet_diagnostic.sa1105.severity = warning + +# Code should not contain empty statements +dotnet_diagnostic.sa1106.severity = warning + +# Code should not contain multiple statements on one line +dotnet_diagnostic.sa1107.severity = warning + +# Block statements should not contain embedded comments +dotnet_diagnostic.sa1108.severity = warning + +# Block statements should not contain embedded regions +dotnet_diagnostic.sa1109.severity = warning + +# Opening parenthesis or bracket should be on declaration line +dotnet_diagnostic.sa1110.severity = warning + +# Closing parenthesis should be on line of last parameter +dotnet_diagnostic.sa1111.severity = warning + +# Closing parenthesis should be on line of opening parenthesis +dotnet_diagnostic.sa1112.severity = warning + +# Comma should be on the same line as previous parameter +dotnet_diagnostic.sa1113.severity = warning + +# Parameter list should follow declaration +dotnet_diagnostic.sa1114.severity = warning + +# Parameter should follow comma +dotnet_diagnostic.sa1115.severity = warning + +# Split parameters should start on line after declaration +dotnet_diagnostic.sa1116.severity = warning + +# Parameters should be on same line or separate lines +dotnet_diagnostic.sa1117.severity = warning + +# Parameter should not span multiple lines +dotnet_diagnostic.sa1118.severity = none + +# Comments should contain text +dotnet_diagnostic.sa1120.severity = warning + +# Use built-in type alias +dotnet_diagnostic.sa1121.severity = warning + +# Use string.Empty for empty strings +dotnet_diagnostic.sa1122.severity = none + +# Do not place regions within elements +dotnet_diagnostic.sa1123.severity = warning + +# Do not use regions +dotnet_diagnostic.sa1124.severity = warning + +# Use shorthand for nullable types +dotnet_diagnostic.sa1125.severity = warning + +# Prefix calls correctly +dotnet_diagnostic.sa1126.severity = none + +# Generic type constraints should be on their own line +dotnet_diagnostic.sa1127.severity = none + +# Put constructor initializers on their own line +dotnet_diagnostic.sa1128.severity = none + +# Do not use default value type constructor +dotnet_diagnostic.sa1129.severity = warning + +# Use lambda syntax +dotnet_diagnostic.sa1130.severity = warning + +# Use readable conditions +dotnet_diagnostic.sa1131.severity = warning + +# Do not combine fields +dotnet_diagnostic.sa1132.severity = none + +# Do not combine attributes +dotnet_diagnostic.sa1133.severity = warning + +# Attributes should not share line +dotnet_diagnostic.sa1134.severity = warning + +# Using directives should be qualified +dotnet_diagnostic.sa1135.severity = warning + +# Enum values should be on separate lines +dotnet_diagnostic.sa1136.severity = warning + +# Elements should have the same indentation +dotnet_diagnostic.sa1137.severity = warning + +# Use literal suffix notation instead of casting +dotnet_diagnostic.sa1139.severity = none + +# Do not prefix local calls with 'this.' +dotnet_diagnostic.sx1101.severity = none + +# StyleCop.Analyzers.OrderingRules + + +# Using directives should be placed correctly +dotnet_diagnostic.sa1200.severity = none + +# Elements should appear in the correct order +dotnet_diagnostic.sa1201.severity = warning + +# Elements should be ordered by access +dotnet_diagnostic.sa1202.severity = warning + +# Constants should appear before fields +dotnet_diagnostic.sa1203.severity = warning + +# Static elements should appear before instance elements +dotnet_diagnostic.sa1204.severity = warning + +# Partial elements should declare access +dotnet_diagnostic.sa1205.severity = warning + +# Declaration keywords should follow order +dotnet_diagnostic.sa1206.severity = warning + +# Protected should come before internal +dotnet_diagnostic.sa1207.severity = warning + +# System using directives should be placed before other using directives +dotnet_diagnostic.sa1208.severity = warning + +# Using alias directives should be placed after other using directives +dotnet_diagnostic.sa1209.severity = warning + +# Using directives should be ordered alphabetically by namespace +dotnet_diagnostic.sa1210.severity = warning + +# Using alias directives should be ordered alphabetically by alias name +dotnet_diagnostic.sa1211.severity = warning + +# Property accessors should follow order +dotnet_diagnostic.sa1212.severity = warning + +# Event accessors should follow order +dotnet_diagnostic.sa1213.severity = warning + +# Readonly fields should appear before non-readonly fields +dotnet_diagnostic.sa1214.severity = warning + +# Using static directives should be placed at the correct location +dotnet_diagnostic.sa1216.severity = warning + +# Using static directives should be ordered alphabetically +dotnet_diagnostic.sa1217.severity = warning + +# StyleCop.Analyzers.NamingRules + + +# Element should begin with upper-case letter +dotnet_diagnostic.sa1300.severity = warning + +# Element should begin with lower-case letter +dotnet_diagnostic.sa1301.severity = none + +# Interface names should begin with I +dotnet_diagnostic.sa1302.severity = warning + +# Const field names should begin with upper-case letter +dotnet_diagnostic.sa1303.severity = warning + +# Non-private readonly fields should begin with upper-case letter +dotnet_diagnostic.sa1304.severity = warning + +# Field names should not use Hungarian notation +dotnet_diagnostic.sa1305.severity = none + +# Field names should begin with lower-case letter +dotnet_diagnostic.sa1306.severity = warning + +# Accessible fields should begin with upper-case letter +dotnet_diagnostic.sa1307.severity = warning + +# Variable names should not be prefixed +dotnet_diagnostic.sa1308.severity = warning + +# Field names should not begin with underscore +dotnet_diagnostic.sa1309.severity = none + +# Field names should not contain underscore +dotnet_diagnostic.sa1310.severity = warning + +# Static readonly fields should begin with upper-case letter +dotnet_diagnostic.sa1311.severity = warning + +# Variable names should begin with lower-case letter +dotnet_diagnostic.sa1312.severity = warning + +# Parameter names should begin with lower-case letter +dotnet_diagnostic.sa1313.severity = warning + +# Type parameter names should begin with T +dotnet_diagnostic.sa1314.severity = warning + +# Field names should begin with underscore +dotnet_diagnostic.sx1309.severity = none + +# Static field names should begin with underscore +dotnet_diagnostic.sx1309s.severity = none + +# StyleCop.Analyzers.MaintainabilityRules + + +# Statement should not use unnecessary parenthesis +dotnet_diagnostic.sa1119.severity = warning + +# Access modifier should be declared +dotnet_diagnostic.sa1400.severity = warning + +# Fields should be private +dotnet_diagnostic.sa1401.severity = none + +# File may only contain a single type +dotnet_diagnostic.sa1402.severity = warning + +# File may only contain a single namespace +dotnet_diagnostic.sa1403.severity = warning + +# Code analysis suppression should have justification +dotnet_diagnostic.sa1404.severity = warning + +# Debug.Assert should provide message text +dotnet_diagnostic.sa1405.severity = warning + +# Debug.Fail should provide message text +dotnet_diagnostic.sa1406.severity = warning + +# Arithmetic expressions should declare precedence +dotnet_diagnostic.sa1407.severity = warning + +# Conditional expressions should declare precedence +dotnet_diagnostic.sa1408.severity = warning + +# Remove unnecessary code +dotnet_diagnostic.sa1409.severity = warning + +# Remove delegate parenthesis when possible +dotnet_diagnostic.sa1410.severity = warning + +# Attribute constructor should not use unnecessary parenthesis +dotnet_diagnostic.sa1411.severity = warning + +# Store files as UTF-8 with byte order mark +dotnet_diagnostic.sa1412.severity = none + +# Use trailing comma in multi-line initializers +dotnet_diagnostic.sa1413.severity = none + +# StyleCop.Analyzers.LayoutRules + + +# Braces for multi-line statements should not share line +dotnet_diagnostic.sa1500.severity = none + +# Statement should not be on a single line +dotnet_diagnostic.sa1501.severity = warning + +# Element should not be on a single line +dotnet_diagnostic.sa1502.severity = warning + +# Braces should not be omitted +dotnet_diagnostic.sa1503.severity = none + +# All accessors should be single-line or multi-line +dotnet_diagnostic.sa1504.severity = none + +# Opening braces should not be followed by blank line +dotnet_diagnostic.sa1505.severity = warning + +# Element documentation headers should not be followed by blank line +dotnet_diagnostic.sa1506.severity = warning + +# Code should not contain multiple blank lines in a row +dotnet_diagnostic.sa1507.severity = warning + +# Closing braces should not be preceded by blank line +dotnet_diagnostic.sa1508.severity = warning + +# Opening braces should not be preceded by blank line +dotnet_diagnostic.sa1509.severity = warning + +# Chained statement blocks should not be preceded by blank line +dotnet_diagnostic.sa1510.severity = warning + +# While-do footer should not be preceded by blank line +dotnet_diagnostic.sa1511.severity = warning + +# Single-line comments should not be followed by blank line +dotnet_diagnostic.sa1512.severity = warning + +# Closing brace should be followed by blank line +dotnet_diagnostic.sa1513.severity = warning + +# Element documentation header should be preceded by blank line +dotnet_diagnostic.sa1514.severity = warning + +# Single-line comment should be preceded by blank line +dotnet_diagnostic.sa1515.severity = warning + +# Elements should be separated by blank line +dotnet_diagnostic.sa1516.severity = none + +# Code should not contain blank lines at start of file +dotnet_diagnostic.sa1517.severity = warning + +# Use line endings correctly at end of file +dotnet_diagnostic.sa1518.severity = none + +# Braces should not be omitted from multi-line child statement +dotnet_diagnostic.sa1519.severity = warning + +# Use braces consistently +dotnet_diagnostic.sa1520.severity = warning + +# StyleCop.Analyzers.DocumentationRules + + +# Elements should be documented +dotnet_diagnostic.sa1600.severity = none + +# Partial elements should be documented +dotnet_diagnostic.sa1601.severity = none + +# Enumeration items should be documented +dotnet_diagnostic.sa1602.severity = none + +# Documentation should contain valid XML +dotnet_diagnostic.sa1603.severity = none + +# Element documentation should have summary +dotnet_diagnostic.sa1604.severity = none + +# Partial element documentation should have summary +dotnet_diagnostic.sa1605.severity = none + +# Element documentation should have summary text +dotnet_diagnostic.sa1606.severity = none + +# Partial element documentation should have summary text +dotnet_diagnostic.sa1607.severity = none + +# Element documentation should not have default summary +dotnet_diagnostic.sa1608.severity = none + +# Property documentation should have value +dotnet_diagnostic.sa1609.severity = none + +# Property documentation should have value text +dotnet_diagnostic.sa1610.severity = none + +# Element parameters should be documented +dotnet_diagnostic.sa1611.severity = none + +# Element parameter documentation should match element parameters +dotnet_diagnostic.sa1612.severity = none + +# Element parameter documentation should declare parameter name +dotnet_diagnostic.sa1613.severity = none + +# Element parameter documentation should have text +dotnet_diagnostic.sa1614.severity = none + +# Element return value should be documented +dotnet_diagnostic.sa1615.severity = none + +# Element return value documentation should have text +dotnet_diagnostic.sa1616.severity = none + +# Void return value should not be documented +dotnet_diagnostic.sa1617.severity = none + +# Generic type parameters should be documented +dotnet_diagnostic.sa1618.severity = none + +# Generic type parameters should be documented partial class +dotnet_diagnostic.sa1619.severity = none + +# Generic type parameter documentation should match type parameters +dotnet_diagnostic.sa1620.severity = none + +# Generic type parameter documentation should declare parameter name +dotnet_diagnostic.sa1621.severity = none + +# Generic type parameter documentation should have text +dotnet_diagnostic.sa1622.severity = none + +# Property summary documentation should match accessors +dotnet_diagnostic.sa1623.severity = none + +# Property summary documentation should omit accessor with restricted access +dotnet_diagnostic.sa1624.severity = none + +# Element documentation should not be copied and pasted +dotnet_diagnostic.sa1625.severity = none + +# Single-line comments should not use documentation style slashes +dotnet_diagnostic.sa1626.severity = none + +# Documentation text should not be empty +dotnet_diagnostic.sa1627.severity = none + +# Documentation text should begin with a capital letter +dotnet_diagnostic.sa1628.severity = none + +# Documentation text should end with a period +dotnet_diagnostic.sa1629.severity = none + +# Documentation text should contain whitespace +dotnet_diagnostic.sa1630.severity = none + +# Documentation should meet character percentage +dotnet_diagnostic.sa1631.severity = none + +# Documentation text should meet minimum character length +dotnet_diagnostic.sa1632.severity = none + +# File should have header +dotnet_diagnostic.sa1633.severity = none + +# File header should show copyright +dotnet_diagnostic.sa1634.severity = none + +# File header should have copyright text +dotnet_diagnostic.sa1635.severity = none + +# File header copyright text should match +dotnet_diagnostic.sa1636.severity = none + +# File header should contain file name +dotnet_diagnostic.sa1637.severity = none + +# File header file name documentation should match file name +dotnet_diagnostic.sa1638.severity = none + +# File header should have summary +dotnet_diagnostic.sa1639.severity = none + +# File header should have valid company text +dotnet_diagnostic.sa1640.severity = none + +# File header company name text should match +dotnet_diagnostic.sa1641.severity = none + +# Constructor summary documentation should begin with standard text +dotnet_diagnostic.sa1642.severity = none + +# Destructor summary documentation should begin with standard text +dotnet_diagnostic.sa1643.severity = none + +# Documentation headers should not contain blank lines +dotnet_diagnostic.sa1644.severity = none + +# Included documentation file does not exist +dotnet_diagnostic.sa1645.severity = none + +# Included documentation XPath does not exist +dotnet_diagnostic.sa1646.severity = none + +# Include node does not contain valid file and path +dotnet_diagnostic.sa1647.severity = none + +# Inheritdoc should be used with inheriting class +dotnet_diagnostic.sa1648.severity = none + +# File name should match first type name +dotnet_diagnostic.sa1649.severity = warning + +# Element documentation should be spelled correctly +dotnet_diagnostic.sa1650.severity = none + +# Do not use placeholder elements +dotnet_diagnostic.sa1651.severity = none +charset = utf-8 +end_of_line = lf +insert_final_newline = false +indent_size = 4 + +# Microsoft .NET properties +csharp_new_line_before_members_in_object_initializers = false +csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion +csharp_space_after_cast = true +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_var_elsewhere = true:suggestion +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +dotnet_diagnostic.bc42024.severity = error +dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True +dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field +dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef +dotnet_naming_rule.unity_serialized_field_rule.severity = none +dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style +dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols +dotnet_naming_rule.unity_serialized_field_rule_1.import_to_resharper = True +dotnet_naming_rule.unity_serialized_field_rule_1.resharper_description = Unity serialized field +dotnet_naming_rule.unity_serialized_field_rule_1.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef +dotnet_naming_rule.unity_serialized_field_rule_1.severity = none +dotnet_naming_rule.unity_serialized_field_rule_1.style = lower_camel_case_style +dotnet_naming_rule.unity_serialized_field_rule_1.symbols = unity_serialized_field_symbols_1 +dotnet_naming_style.lower_camel_case_style.capitalization = camel_case +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = * +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds = +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance +dotnet_naming_symbols.unity_serialized_field_symbols_1.applicable_accessibilities = * +dotnet_naming_symbols.unity_serialized_field_symbols_1.applicable_kinds = +dotnet_naming_symbols.unity_serialized_field_symbols_1.resharper_applicable_kinds = unity_serialised_field +dotnet_naming_symbols.unity_serialized_field_symbols_1.resharper_required_modifiers = instance +dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none +dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion +dotnet_style_qualification_for_event = false:suggestion +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion + +# ReSharper properties +resharper_autodetect_indent_settings = true +resharper_blank_lines_around_single_line_auto_property = 1 +resharper_blank_lines_before_block_statements = 1 +resharper_csharp_max_line_length = 150 +resharper_csharp_wrap_after_invocation_lpar = true +resharper_enforce_line_ending_style = true +resharper_formatter_off_tag = @formatter:off +resharper_formatter_on_tag = @formatter:on +resharper_formatter_tags_enabled = true +resharper_instance_members_qualify_declared_in = +resharper_object_creation_when_type_not_evident = target_typed +resharper_place_accessorholder_attribute_on_same_line = false +resharper_place_expr_property_on_single_line = false +resharper_place_simple_initializer_on_single_line = false +resharper_space_within_single_line_array_initializer_braces = false +resharper_trailing_comma_in_multiline_lists = true +resharper_use_indent_from_vs = false +resharper_wrap_array_initializer_style = chop_always + +# ReSharper inspection severities +resharper_arrange_redundant_parentheses_highlighting = hint +resharper_arrange_this_qualifier_highlighting = hint +resharper_arrange_type_member_modifiers_highlighting = hint +resharper_arrange_type_modifiers_highlighting = hint +resharper_auto_property_can_be_made_get_only_global_highlighting = none +resharper_auto_property_can_be_made_get_only_local_highlighting = none +resharper_built_in_type_reference_style_for_member_access_highlighting = hint +resharper_built_in_type_reference_style_highlighting = hint +resharper_class_never_instantiated_global_highlighting = none +resharper_inconsistent_naming_highlighting = none +resharper_property_can_be_made_init_only_global_highlighting = none +resharper_redundant_base_qualifier_highlighting = warning +resharper_suggest_base_type_for_parameter_in_constructor_highlighting = none +resharper_suggest_var_or_type_built_in_types_highlighting = hint +resharper_suggest_var_or_type_elsewhere_highlighting = hint +resharper_suggest_var_or_type_simple_types_highlighting = hint +resharper_unused_auto_property_accessor_global_highlighting = none +resharper_unused_member_global_highlighting = none +resharper_unused_member_in_super_global_highlighting = none +resharper_unused_method_return_value_global_highlighting = none +resharper_unused_method_return_value_local_highlighting = none +resharper_unused_type_global_highlighting = none +resharper_web_config_module_not_resolved_highlighting = warning +resharper_web_config_type_not_resolved_highlighting = warning +resharper_web_config_wrong_module_highlighting = warning + +[{*.har,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}] +indent_style = space +indent_size = 2 + +[{*.yaml,*.yml}] +indent_style = space +indent_size = 2 + +[{*.bash,*.sh,*.zsh}] +indent_style = space +indent_size = 2 + +[*.{appxmanifest,asax,ascx,aspx,axaml,build,c,c++,c++m,cc,ccm,cginc,compute,cp,cpp,cppm,cs,cshtml,cu,cuh,cxx,cxxm,dtd,fs,fsi,fsscript,fsx,fx,fxh,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,ixx,master,ml,mli,mpp,mq4,mq5,mqh,mxx,nuspec,paml,razor,resw,resx,shader,skin,tpp,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}] +indent_style = space +indent_size = 4 +tab_width = 4 diff --git a/.gitignore b/.gitignore index 7bbf0b1..e40d968 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,405 @@ -/.idea **/node_modules -**.env .now -/scraper/manual/examples.js \ No newline at end of file +.DS_Store +.idea + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +dist/ diff --git a/README.md b/README.md index ae00267..1cf2349 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,10 @@ ``` docker-compose up -d ``` -Then open your browser to `127.0.0.1:7000` \ No newline at end of file +Then open your browser to `127.0.0.1:7000` + +If you'd like to enable crawling of RealDebridManager's shared hashlists which will massively boost your database cached entries, +enter a readonly github personal access token in 'env/producer.env' as the 'GithubSettings__PAT=' value. + +You can scale the number of consumers, by changing the consumer deploy replica count in the compose file on line 87. This is currently set to 3. +If you'd like to adjust the number of concurrent processed ingestions per consumer, thats the job concurrency setting within 'env/consumer.env'. \ No newline at end of file diff --git a/addon/Dockerfile b/addon/Dockerfile deleted file mode 100644 index 14dd96e..0000000 --- a/addon/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:21-alpine - -RUN apk update && apk upgrade && \ - apk add --no-cache git - -WORKDIR /home/node/app - -COPY package*.json ./ -RUN npm ci --only-production -COPY . . - -CMD [ "node", "--insecure-http-parser", "index.js" ] \ No newline at end of file diff --git a/addon/lib/configuration.js b/addon/lib/configuration.js deleted file mode 100644 index d646297..0000000 --- a/addon/lib/configuration.js +++ /dev/null @@ -1,82 +0,0 @@ -import { DebridOptions } from '../moch/options.js'; -import { QualityFilter, Providers, SizeFilter } from './filter.js'; -import { LanguageOptions } from './languages.js'; - -export const PreConfigurations = { - lite: { - config: liteConfig(), - serialized: configValue(liteConfig()), - manifest: { - id: 'com.stremio.torrentio.lite.addon', - name: 'Torrentio Lite', - description: 'Preconfigured Lite version of Torrentio addon.' - + ' To configure advanced options visit https://torrentio.strem.fun/lite' - } - }, - brazuca: { - config: brazucaConfig(), - serialized: configValue(brazucaConfig()), - manifest: { - id: 'com.stremio.torrentio.brazuca.addon', - name: 'Torrentio Brazuca', - description: 'Preconfigured version of Torrentio addon for Brazilian content.' - + ' To configure advanced options visit https://torrentio.strem.fun/brazuca', - logo: 'https://i.ibb.co/8mgRZPp/GwxAcDV.png' - } - } -} - -const keysToSplit = [Providers.key, LanguageOptions.key, QualityFilter.key, SizeFilter.key, DebridOptions.key]; -const keysToUppercase = [SizeFilter.key]; - -export function parseConfiguration(configuration) { - if (!configuration) { - return undefined; - } - if (PreConfigurations[configuration]) { - return PreConfigurations[configuration].config; - } - const configValues = configuration.split('|') - .reduce((map, next) => { - const parameterParts = next.split('='); - if (parameterParts.length === 2) { - map[parameterParts[0].toLowerCase()] = parameterParts[1]; - } - return map; - }, {}); - keysToSplit - .filter(key => configValues[key]) - .forEach(key => configValues[key] = configValues[key].split(',') - .map(value => keysToUppercase.includes(key) ? value.toUpperCase() : value.toLowerCase())) - return configValues; -} - -function liteConfig() { - const config = {}; - config[Providers.key] = Providers.options - .filter(provider => !provider.foreign) - .map(provider => provider.key); - config[QualityFilter.key] = ['scr', 'cam'] - config['limit'] = 1; - return config; -} - -function brazucaConfig() { - const config = {}; - config[Providers.key] = Providers.options - .filter(provider => !provider.foreign || provider.foreign === '🇵🇹') - .map(provider => provider.key); - config[LanguageOptions.key] = ['portuguese']; - return config; -} - -function configValue(config) { - return Object.entries(config) - .map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(',') : value}`) - .join('|'); -} - -export function getManifestOverride(config) { - const preConfig = Object.values(PreConfigurations).find(pre => pre.config === config); - return preConfig ? preConfig.manifest : {}; -} \ No newline at end of file diff --git a/addon/lib/namedQueue.js b/addon/lib/namedQueue.js deleted file mode 100644 index 695ce05..0000000 --- a/addon/lib/namedQueue.js +++ /dev/null @@ -1,11 +0,0 @@ -import namedQueue from "named-queue"; - -export function createNamedQueue(concurrency) { - const queue = new namedQueue((task, callback) => task.method() - .then(result => callback(false, result)) - .catch((error => callback(error))), 200); - queue.wrap = (id, method) => new Promise(((resolve, reject) => { - queue.push({ id, method }, (error, result) => result ? resolve(result) : reject(error)); - })); - return queue; -} \ No newline at end of file diff --git a/addon/lib/sort.js b/addon/lib/sort.js deleted file mode 100644 index cd9de08..0000000 --- a/addon/lib/sort.js +++ /dev/null @@ -1,128 +0,0 @@ -import { QualityFilter } from './filter.js'; -import { containsLanguage, LanguageOptions } from './languages.js'; -import { Type } from './types.js'; -import { hasMochConfigured } from '../moch/moch.js'; -import { extractSeeders, extractSize } from './titleHelper.js'; - -const OTHER_QUALITIES = QualityFilter.options.find(option => option.key === 'other'); -const CAM_QUALITIES = QualityFilter.options.find(option => option.key === 'cam'); -const HEALTHY_SEEDERS = 5; -const SEEDED_SEEDERS = 1; -const MIN_HEALTHY_COUNT = 50; -const MAX_UNHEALTHY_COUNT = 5; - -export const SortOptions = { - key: 'sort', - options: { - qualitySeeders: { - key: 'quality', - description: 'By quality then seeders' - }, - qualitySize: { - key: 'qualitysize', - description: 'By quality then size' - }, - seeders: { - key: 'seeders', - description: 'By seeders' - }, - size: { - key: 'size', - description: 'By size' - }, - } -} - -export default function sortStreams(streams, config, type) { - const languages = config[LanguageOptions.key]; - if (languages?.length && languages[0] !== 'english') { - // No need to filter english since it's hard to predict which entries are english - const streamsWithLanguage = streams.filter(stream => containsLanguage(stream, languages)); - const streamsNoLanguage = streams.filter(stream => !streamsWithLanguage.includes(stream)); - return _sortStreams(streamsWithLanguage, config, type).concat(_sortStreams(streamsNoLanguage, config, type)); - } - return _sortStreams(streams, config, type); -} - -function _sortStreams(streams, config, type) { - const sort = config?.sort?.toLowerCase() || undefined; - const limit = /^[1-9][0-9]*$/.test(config.limit) && parseInt(config.limit) || undefined; - const sortedStreams = sortBySeeders(streams, config, type); - if (sort === SortOptions.options.seeders.key) { - return sortedStreams.slice(0, limit); - } else if (sort === SortOptions.options.size.key) { - return sortBySize(sortedStreams, limit); - } - const nestedSort = sort === SortOptions.options.qualitySize.key ? sortBySize : noopSort; - return sortByVideoQuality(sortedStreams, nestedSort, limit) -} - -function noopSort(streams) { - return streams; -} - -function sortBySeeders(streams, config, type) { - // streams are already presorted by seeders and upload date - const healthy = streams.filter(stream => extractSeeders(stream.title) >= HEALTHY_SEEDERS); - const seeded = streams.filter(stream => extractSeeders(stream.title) >= SEEDED_SEEDERS); - - if (type === Type.SERIES && hasMochConfigured(config)) { - return streams; - } else if (healthy.length >= MIN_HEALTHY_COUNT) { - return healthy; - } else if (seeded.length >= MAX_UNHEALTHY_COUNT) { - return seeded.slice(0, MIN_HEALTHY_COUNT); - } - return streams.slice(0, MAX_UNHEALTHY_COUNT); -} - -function sortBySize(streams, limit) { - return streams - .sort((a, b) => { - const aSize = extractSize(a.title); - const bSize = extractSize(b.title); - return bSize - aSize; - }).slice(0, limit); -} - -function sortByVideoQuality(streams, nestedSort, limit) { - const qualityMap = streams - .reduce((map, stream) => { - const quality = extractQuality(stream.name); - map[quality] = (map[quality] || []).concat(stream); - return map; - }, {}); - const sortedQualities = Object.keys(qualityMap) - .sort((a, b) => { - const aResolution = a?.match(/\d+p/) && parseInt(a, 10); - const bResolution = b?.match(/\d+p/) && parseInt(b, 10); - if (aResolution && bResolution) { - return bResolution - aResolution; // higher resolution first; - } else if (aResolution) { - return -1; // remain higher if resolution is there - } else if (bResolution) { - return 1; // move downward if other stream has resolution - } - return a < b ? -1 : b < a ? 1 : 0; // otherwise sort by alphabetic order - }); - return sortedQualities - .map(quality => nestedSort(qualityMap[quality]).slice(0, limit)) - .reduce((a, b) => a.concat(b), []); -} - -function extractQuality(title) { - const qualityDesc = title.split('\n')[1]; - const resolutionMatch = qualityDesc?.match(/\d+p/); - if (resolutionMatch) { - return resolutionMatch[0]; - } else if (/8k/i.test(qualityDesc)) { - return '4320p' - } else if (/4k|uhd/i.test(qualityDesc)) { - return '2060p' - } else if (CAM_QUALITIES.test(qualityDesc)) { - return CAM_QUALITIES.label; - } else if (OTHER_QUALITIES.test(qualityDesc)) { - return OTHER_QUALITIES.label; - } - return qualityDesc; -} diff --git a/addon/package-lock.json b/addon/package-lock.json deleted file mode 100644 index 5d7445c..0000000 --- a/addon/package-lock.json +++ /dev/null @@ -1,2579 +0,0 @@ -{ - "name": "stremio-torrentio", - "version": "1.0.14", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "stremio-torrentio", - "version": "1.0.14", - "license": "MIT", - "dependencies": { - "@putdotio/api-client": "^8.42.0", - "all-debrid-api": "^1.1.0", - "axios": "^1.6.1", - "bottleneck": "^2.19.5", - "cache-manager": "^3.4.4", - "cache-manager-mongodb": "^0.3.0", - "cors": "^2.8.5", - "debrid-link-api": "^1.0.1", - "express-rate-limit": "^6.7.0", - "magnet-uri": "^6.2.0", - "name-to-imdb": "^3.0.4", - "named-queue": "^2.2.1", - "offcloud-api": "^1.0.2", - "p-limit": "^5.0.0", - "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", - "pg": "^8.11.3", - "pg-hstore": "^2.3.4", - "premiumize-api": "^1.0.3", - "prom-client": "^12.0.0", - "real-debrid-api": "git://github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", - "request-ip": "^3.3.0", - "router": "^1.3.8", - "sequelize": "^6.31.1", - "stremio-addon-sdk": "^1.6.10", - "swagger-stats": "^0.99.7", - "ua-parser-js": "^1.0.36", - "user-agents": "^1.0.1444" - } - }, - "node_modules/@putdotio/api-client": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.42.0.tgz", - "integrity": "sha512-LaFaPMOO8WbvwzUlvuzBcBH9aSpqZIkA6MuoKJPNZ293kFSMZPyXkE/VddVXPNq0f5sp7HzdueCMIPOxcom9hg==", - "dependencies": { - "axios": "^0.21.1", - "event-emitter": "^0.3.5", - "js-base64": "2.6.3", - "qs": "^6.10.3", - "urijs": "^1.19.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@putdotio/api-client/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - }, - "node_modules/@types/validator": { - "version": "13.7.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.3.tgz", - "integrity": "sha512-DNviAE5OUcZ5s+XEQHRhERLg8fOp8gSgvyJ4aaFASx5wwaObm+PBwTIMXiOFm1QrSee5oYwEAYb7LMzX2O88gA==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/all-debrid-api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/all-debrid-api/-/all-debrid-api-1.1.0.tgz", - "integrity": "sha512-p6Z8M9UBGkEZK2/qJ2YHBPDyDGW1CEZQ+GCp8IQb4UlC/9GIUgeRPjh2ohoAIBPn3gs6hPvZ8wIVS04lJ3SuHA==", - "dependencies": { - "request": "^2.83.0" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" - }, - "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bep53-range": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bep53-range/-/bep53-range-1.1.1.tgz", - "integrity": "sha512-ct6s33iiwRCUPp9KXnJ4QMWDgHIgaw36caK/5XEQ9L8dCzSQlJt1Vk6VmHh1VD4AlGCAI4C2zmtfItifBBPrhQ==" - }, - "node_modules/bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", - "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", - "dependencies": { - "async": "3.2.3", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "6.0.0" - } - }, - "node_modules/cache-manager-mongodb": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/cache-manager-mongodb/-/cache-manager-mongodb-0.3.0.tgz", - "integrity": "sha512-r+piWvu8XD8ceBWflZBEQZKemksoaL1V5zSHWyviVTXiGBSVQAf18b4S1v5UwGZMJnrMk8YNFgpBlugF0nuhvg==", - "dependencies": { - "bluebird": "^3.5.3", - "cache-manager": "^2.9.0", - "lodash": "^4.17.15", - "mongodb": "^3.6.3" - } - }, - "node_modules/cache-manager-mongodb/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - }, - "node_modules/cache-manager-mongodb/node_modules/cache-manager": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz", - "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==", - "dependencies": { - "async": "1.5.2", - "lodash.clonedeep": "4.5.0", - "lru-cache": "4.0.0" - } - }, - "node_modules/cache-manager-mongodb/node_modules/lru-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", - "integrity": "sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==", - "dependencies": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "node_modules/cache-manager-mongodb/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debrid-link-api": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debrid-link-api/-/debrid-link-api-1.0.1.tgz", - "integrity": "sha512-8b15xUosQ64v1wcN1cGSvt4YXm4dw7gi5hOvqPDOtvsEtlaH2pp/BdjS9/oUh866bPirFVzXrjnIwVK4dRsm3g==", - "dependencies": { - "request": "^2.83.0" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/diacritics": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", - "integrity": "sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==" - }, - "node_modules/dottie": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", - "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", - "engines": { - "node": ">= 12.9.0" - }, - "peerDependencies": { - "express": "^4 || ^5" - } - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "node_modules/js-base64": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz", - "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magnet-uri": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-6.2.0.tgz", - "integrity": "sha512-O9AgdDwT771fnUj0giPYu/rACpz8173y8UXCSOdLITjOVfBenZ9H9q3FqQmveK+ORUMuD+BkKNSZP8C3+IMAKQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "bep53-range": "^1.1.0", - "thirty-two": "^1.0.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.40", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", - "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "node_modules/name-to-imdb": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/name-to-imdb/-/name-to-imdb-3.0.4.tgz", - "integrity": "sha512-OVmDvWoAZso2eHxK51UK7TMIpUpM4LnI3KhvvZe+JkDatEda9WS3/YXZVQnand5skI38shoniOFcyrw08QsNeA==", - "dependencies": { - "diacritics": "~1.3.0", - "named-queue": "^2.1.0", - "needle": "^1.1.2", - "node-fetch": "^2.2.0" - } - }, - "node_modules/named-queue": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/named-queue/-/named-queue-2.2.1.tgz", - "integrity": "sha1-GBRURVNZnVqeQD0N+pN6TODR5qc=" - }, - "node_modules/needle": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-1.6.0.tgz", - "integrity": "sha512-ogVK1D/Cgemw2vM1KJN6B83DwcKbDepdkMNtVJcXIe+xoaCOdC+aJHzhEov7xjsY9S7rBIuHP59W1fLsbGqDhA==", - "dependencies": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 0.10.x" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/offcloud-api": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/offcloud-api/-/offcloud-api-1.0.2.tgz", - "integrity": "sha512-KOxDX+QIUcI/JEwoXoRGK7P+RygSsmCOta/6bEtKeBMc9CDEnb9xgGNDjDFYCxm6U8rvaOhF9NA02i3EisH9Pw==", - "dependencies": { - "request": "^2.83.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/parse-torrent-title": { - "version": "1.3.0", - "resolved": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", - "integrity": "sha512-Ja7OfUtTb5UKvcjHLh/va3LGZdE/CiJP6it8lxPWf/N9+4aq1hQGwXw1dnJss5dIINQo4ufyDnT2mOIP+ii/pA==", - "license": "MIT", - "dependencies": { - "moment": "^2.24.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/pg": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.2", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" - }, - "node_modules/pg-hstore": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", - "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", - "dependencies": { - "underscore": "^1.13.1" - }, - "engines": { - "node": ">= 0.8.x" - } - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "dependencies": { - "split2": "^3.1.1" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/premiumize-api": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/premiumize-api/-/premiumize-api-1.0.3.tgz", - "integrity": "sha512-WwJhgmwrKrFFtfjU2EMAaYv602xbe52oaGEwVJXO3z0LZQZ8Cogk9MBADcT0hrFf8MuI7zn5cPMxcJRJPr9cMQ==", - "dependencies": { - "request": "^2.83.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prom-client": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz", - "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==", - "dependencies": { - "tdigest": "^0.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/real-debrid-api": { - "version": "1.0.1", - "resolved": "git+ssh://git@github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", - "integrity": "sha512-P4eoA7/wvDM6/l06OZYX4CBnIzsTNwebdS6fZ4u6LZ3fcJqTzWz3D63xBDZmfcOca/OeUN4ncFld+KxvrNr0oA==", - "license": "MIT", - "dependencies": { - "request": "^2.83.0" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-ip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", - "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/retry-as-promised": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", - "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" - }, - "node_modules/router": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", - "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", - "dependencies": { - "array-flatten": "3.0.0", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router/node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" - }, - "node_modules/run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "dependencies": { - "is-promise": "^2.1.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/sequelize": { - "version": "6.31.1", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.31.1.tgz", - "integrity": "sha512-cahWtRrYLjqoZP/aurGBoaxn29qQCF4bxkAUPEQ/ozjJjt6mtL4Q113S3N39mQRmX5fgxRbli+bzZARP/N51eg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/sequelize" - } - ], - "dependencies": { - "@types/debug": "^4.1.7", - "@types/validator": "^13.7.1", - "debug": "^4.3.3", - "dottie": "^2.0.2", - "inflection": "^1.13.2", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "moment-timezone": "^0.5.35", - "pg-connection-string": "^2.5.0", - "retry-as-promised": "^7.0.3", - "semver": "^7.3.5", - "sequelize-pool": "^7.1.0", - "toposort-class": "^1.0.1", - "uuid": "^8.3.2", - "validator": "^13.7.0", - "wkx": "^0.5.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependenciesMeta": { - "ibm_db": { - "optional": true - }, - "mariadb": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-hstore": { - "optional": true - }, - "snowflake-sdk": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "tedious": { - "optional": true - } - } - }, - "node_modules/sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/sequelize/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sequelize/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/sequelize/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sequelize/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stremio-addon-linter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", - "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", - "dependencies": { - "semver": "^5.5.0" - } - }, - "node_modules/stremio-addon-sdk": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", - "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", - "dependencies": { - "chalk": "^2.4.2", - "cors": "^2.8.4", - "express": "^4.16.3", - "inquirer": "^6.2.2", - "mkdirp": "^0.5.1", - "node-fetch": "^2.3.0", - "opn": "^5.4.0", - "router": "^1.3.3", - "stremio-addon-linter": "^1.7.0" - }, - "bin": { - "addon-bootstrap": "cli/bootstrap.js" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swagger-stats": { - "version": "0.99.7", - "resolved": "https://registry.npmjs.org/swagger-stats/-/swagger-stats-0.99.7.tgz", - "integrity": "sha512-niP70m99Cwpz/Fyfk8ydul1jM0pOKD6UofSaDzW2Op6o6WYFsuAl/BhVbmLkZWOAZ7IloDVvFj6vaU5zA0xydg==", - "dependencies": { - "axios": "^1.4.0", - "basic-auth": "^2.0.1", - "cookies": "^0.8.0", - "debug": "^4.3.4", - "moment": "^2.29.4", - "path-to-regexp": "^6.2.1", - "qs": "^6.11.2", - "send": "^0.18.0", - "uuid": "^9.0.0" - }, - "peerDependencies": { - "prom-client": ">= 10 <= 14" - } - }, - "node_modules/swagger-stats/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/swagger-stats/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/swagger-stats/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" - }, - "node_modules/swagger-stats/node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swagger-stats/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/tdigest": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", - "dependencies": { - "bintrees": "1.0.2" - } - }, - "node_modules/thirty-two": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno=", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", - "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "node_modules/user-agents": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.9.tgz", - "integrity": "sha512-XxKEWX2bHJzPjvUPRAtw+oPQchReLaR1s59iO/RhBA2TfLLgLUsFvz5MupsejqFfuhXZmZRH8t3kHBvS0ctzGg==", - "dependencies": { - "lodash.clonedeep": "^4.5.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/catalogs/Dockerfile b/catalogs/Dockerfile deleted file mode 100644 index d51871f..0000000 --- a/catalogs/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:16-alpine - -RUN apk update && apk upgrade && \ - apk add --no-cache git - -WORKDIR /home/node/app - -COPY ./catalogs . -COPY ./addon ../addon -RUN npm ci --only-production - -CMD [ "node", "index.js" ] \ No newline at end of file diff --git a/catalogs/addon.js b/catalogs/addon.js deleted file mode 100644 index a07e60e..0000000 --- a/catalogs/addon.js +++ /dev/null @@ -1,99 +0,0 @@ -import Bottleneck from 'bottleneck'; -import moment from 'moment'; -import { addonBuilder } from 'stremio-addon-sdk'; -import { Providers } from '../addon/lib/filter.js'; -import { createManifest, genres } from './lib/manifest.js'; -import { getMetas } from './lib/metadata.js'; -import { cacheWrapCatalog, cacheWrapIds } from './lib/cache.js'; -import * as repository from './lib/repository.js'; - -const CACHE_MAX_AGE = parseInt(process.env.CACHE_MAX_AGE) || 4 * 60 * 60; // 4 hours in seconds -const STALE_REVALIDATE_AGE = 4 * 60 * 60; // 4 hours -const STALE_ERROR_AGE = 7 * 24 * 60 * 60; // 7 days - -const manifest = createManifest(); -const builder = new addonBuilder(manifest); -const limiter = new Bottleneck({ - maxConcurrent: process.env.LIMIT_MAX_CONCURRENT || 20, - highWater: process.env.LIMIT_QUEUE_SIZE || 50, - strategy: Bottleneck.strategy.OVERFLOW -}); -const defaultProviders = Providers.options - .filter(provider => !provider.foreign) - .map(provider => provider.label) - .sort(); - -builder.defineCatalogHandler((args) => { - const offset = parseInt(args.extra.skip || '0', 10); - const genre = args.extra.genre || 'default'; - const catalog = manifest.catalogs.find(c => c.id === args.id); - const providers = defaultProviders; - console.log(`Incoming catalog ${args.id} request with genre=${genre} and skip=${offset}`) - if (!catalog) { - return Promise.reject(`No catalog found for with id: ${args.id}`) - } - - const cacheKey = createCacheKey(catalog.id, providers, genre, offset); - return limiter.schedule(() => cacheWrapCatalog(cacheKey, () => getCatalog(catalog, providers, genre, offset))) - .then(metas => ({ - metas: metas, - cacheMaxAge: CACHE_MAX_AGE, - staleRevalidate: STALE_REVALIDATE_AGE, - staleError: STALE_ERROR_AGE - })) - .catch(error => Promise.reject(`Failed retrieving catalog ${args.id}: ${error.message}`)); -}) - -async function getCursor(catalog, providers, genre, offset) { - if (offset === 0) { - return undefined; - } - const previousOffset = offset - catalog.pageSize; - const previousCacheKey = createCacheKey(catalog.id, providers, genre, previousOffset); - return cacheWrapCatalog(previousCacheKey, () => Promise.reject("cursor not found")) - .then(metas => metas[metas.length - 1]) - .then(meta => meta.id.replace('kitsu:', '')) -} - -async function getCatalog(catalog, providers, genre, offset) { - const cursor = await getCursor(catalog, providers, genre, offset) - const startDate = getStartDate(genre)?.toISOString(); - const endDate = getEndDate(genre)?.toISOString(); - const cacheKey = createCacheKey(catalog.id, providers, genre); - - return cacheWrapIds(cacheKey, () => repository.getIds(providers, catalog.type, startDate, endDate)) - .then(ids => ids.slice(ids.indexOf(cursor) + 1)) - .then(ids => getMetas(ids, catalog.type)) - .then(metas => metas.slice(0, catalog.pageSize)); -} - -function getStartDate(genre) { - switch (genre) { - case genres[0]: return moment().utc().subtract(1, 'day').startOf('day'); - case genres[1]: return moment().utc().startOf('isoWeek'); - case genres[2]: return moment().utc().subtract(7, 'day').startOf('isoWeek'); - case genres[3]: return moment().utc().startOf('month'); - case genres[4]: return moment().utc().subtract(30, 'day').startOf('month'); - case genres[5]: return undefined; - default: return moment().utc().subtract(30, 'day').startOf('day'); - } -} - -function getEndDate(genre) { - switch (genre) { - case genres[0]: return moment().utc().subtract(1, 'day').endOf('day'); - case genres[1]: return moment().utc().endOf('isoWeek'); - case genres[2]: return moment().utc().subtract(7, 'day').endOf('isoWeek'); - case genres[3]: return moment().utc().endOf('month'); - case genres[4]: return moment().utc().subtract(30, 'day').endOf('month'); - case genres[5]: return undefined; - default: return moment().utc().subtract(1, 'day').endOf('day'); - } -} - -function createCacheKey(catalogId, providers, genre, offset) { - const dateKey = moment().format('YYYY-MM-DD'); - return [catalogId, providers.join(','), genre, dateKey, offset].filter(x => x !== undefined).join('|'); -} - -export default builder.getInterface(); diff --git a/catalogs/index.js b/catalogs/index.js deleted file mode 100644 index 3d55fa9..0000000 --- a/catalogs/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import express from 'express'; -import serverless from './serverless.js'; - -const app = express(); - -app.use((req, res, next) => serverless(req, res, next)); -app.listen(process.env.PORT || 7000, () => { - console.log(`Started addon at: http://localhost:${process.env.PORT || 7000}`); -}); diff --git a/catalogs/lib/cache.js b/catalogs/lib/cache.js deleted file mode 100644 index 57b8c3b..0000000 --- a/catalogs/lib/cache.js +++ /dev/null @@ -1,46 +0,0 @@ -import cacheManager from 'cache-manager'; -import mangodbStore from 'cache-manager-mongodb'; - -const CATALOG_TTL = process.env.STREAM_TTL || 24 * 60 * 60; // 24 hours - -const MONGO_URI = process.env.MONGODB_URI; - -const remoteCache = initiateRemoteCache(); - -function initiateRemoteCache() { - if (MONGO_URI) { - return cacheManager.caching({ - store: mangodbStore, - uri: MONGO_URI, - options: { - collection: 'torrentio_catalog_collection', - socketTimeoutMS: 120000, - useNewUrlParser: true, - useUnifiedTopology: false, - ttl: CATALOG_TTL - }, - ttl: CATALOG_TTL, - ignoreCacheErrors: true - }); - } else { - return cacheManager.caching({ - store: 'memory', - ttl: CATALOG_TTL - }); - } -} - -function cacheWrap(cache, key, method, options) { - if (!cache) { - return method(); - } - return cache.wrap(key, method, options); -} - -export function cacheWrapCatalog(key, method) { - return cacheWrap(remoteCache, key, method, { ttl: CATALOG_TTL }); -} - -export function cacheWrapIds(key, method) { - return cacheWrap(remoteCache, `ids|${key}`, method, { ttl: CATALOG_TTL }); -} diff --git a/catalogs/lib/landingTemplate.js b/catalogs/lib/landingTemplate.js deleted file mode 100644 index 68f6090..0000000 --- a/catalogs/lib/landingTemplate.js +++ /dev/null @@ -1,274 +0,0 @@ -const STYLESHEET = ` -* { - box-sizing: border-box; -} - -body, -html { - margin: 0; - padding: 0; - width: 100%; - height: 100% -} - -html { - background-size: auto 100%; - background-size: cover; - background-position: center center; - background-repeat: repeat-y; -} - -body { - display: flex; - background-color: transparent; - font-family: 'Open Sans', Arial, sans-serif; - color: white; -} - -h1 { - font-size: 4.5vh; - font-weight: 700; -} - -h2 { - font-size: 2.2vh; - font-weight: normal; - font-style: italic; - opacity: 0.8; -} - -h3 { - font-size: 2.2vh; -} - -h1, -h2, -h3, -p, -label { - margin: 0; - text-shadow: 0 0 1vh rgba(0, 0, 0, 0.15); -} - -p { - font-size: 1.75vh; -} - -ul { - font-size: 1.75vh; - margin: 0; - margin-top: 1vh; - padding-left: 3vh; -} - -a { - color: green -} - -a.install-link { - text-decoration: none -} - -button { - border: 0; - outline: 0; - color: white; - background: #8A5AAB; - padding: 1.2vh 3.5vh; - margin: auto; - text-align: center; - font-family: 'Open Sans', Arial, sans-serif; - font-size: 2.2vh; - font-weight: 600; - cursor: pointer; - display: block; - box-shadow: 0 0.5vh 1vh rgba(0, 0, 0, 0.2); - transition: box-shadow 0.1s ease-in-out; -} - -button:hover { - box-shadow: none; -} - -button:active { - box-shadow: 0 0 0 0.5vh white inset; -} - -#addon { - width: 90vh; - margin: auto; - padding-left: 10%; - padding-right: 10%; - background: rgba(0, 0, 0, 0.60); -} - -.logo { - height: 14vh; - width: 14vh; - margin: auto; - margin-bottom: 3vh; -} - -.logo img { - width: 100%; -} - -.name, .version { - display: inline-block; - vertical-align: top; -} - -.name { - line-height: 5vh; -} - -.version { - position: absolute; - line-height: 5vh; - margin-left: 1vh; - opacity: 0.8; -} - -.contact { - position: absolute; - left: 0; - bottom: 4vh; - width: 100%; - text-align: center; -} - -.contact a { - font-size: 1.4vh; - font-style: italic; -} - -.separator { - margin-bottom: 4vh; -} - -.label { - font-size: 2.2vh; - font-weight: 600; - padding: 0; - line-height: inherit; -} - -.btn-group, .multiselect-container { - width: 100%; -} - -.btn { - text-align: left; -} - -.multiselect-container { - border: 0; - border-radius: 0; -} - -.input, .btn { - height: 3.8vh; - width: 100%; - margin: auto; - margin-bottom: 10px; - padding: 6px 12px; - border: 0; - border-radius: 0; - outline: 0; - color: #333; - background-color: rgb(255, 255, 255); - box-shadow: 0 0.5vh 1vh rgba(0, 0, 0, 0.2); -} -`; -import { Providers } from '../../addon/lib/filter.js'; - -export default function landingTemplate(manifest, config = {}) { - const providers = config.providers || []; - - const background = manifest.background || 'https://dl.strem.io/addon-background.jpg'; - const logo = manifest.logo || 'https://dl.strem.io/addon-logo.png'; - const contactHTML = manifest.contactEmail ? - `
-

Contact ${manifest.name} creator:

- ${manifest.contactEmail} -
` : '
'; - const providersHTML = Providers.options - .map(provider => ``) - .join('\n'); - const stylizedTypes = manifest.types - .map(t => t[0].toUpperCase() + t.slice(1) + (t !== 'series' ? 's' : '')); - - return ` - - - - - - ${manifest.name} - Stremio Addon - - - - - - - - - - - - -
- -

${manifest.name}

-

${manifest.version || '0.0.0'}

-

${manifest.description || ''}

- -
- -

This addon has more :

- - -
- - - - -
- - - - - ${contactHTML} -
- - - - ` -} diff --git a/catalogs/lib/manifest.js b/catalogs/lib/manifest.js deleted file mode 100644 index 37cbb99..0000000 --- a/catalogs/lib/manifest.js +++ /dev/null @@ -1,54 +0,0 @@ -import { Type } from '../../addon/lib/types.js'; - -export const genres = [ - 'Yesterday', - 'This Week', - 'Last Week', - 'This Month', - 'Last Month', - 'All Time' -] - -export function createManifest() { - return { - id: 'com.stremio.torrentio.catalog.addon', - version: '1.0.2', - name: 'Torrent Catalogs', - description: 'Provides catalogs for movies/series/anime based on top seeded torrents. Requires Kitsu addon for anime.', - logo: `https://i.ibb.co/w4BnkC9/GwxAcDV.png`, - background: `https://i.ibb.co/VtSfFP9/t8wVwcg.jpg`, - types: [Type.MOVIE, Type.SERIES, Type.ANIME], - resources: ['catalog'], - catalogs: [ - { - id: 'top-movies', - type: Type.MOVIE, - name: "Top seeded", - pageSize: 20, - extra: [{ name: 'genre', options: genres }, { name: 'skip' }], - genres: genres - }, - { - id: 'top-series', - type: Type.SERIES, - name: "Top seeded", - pageSize: 20, - extra: [{ name: 'genre', options: genres }, { name: 'skip' }], - genres: genres - }, - { - id: 'top-anime', - type: Type.ANIME, - name: "Top seeded", - pageSize: 20, - extra: [{ name: 'genre', options: genres }, { name: 'skip' }], - genres: genres - } - ], - behaviorHints: { - // @TODO might enable configuration to configure providers - configurable: false, - configurationRequired: false - } - }; -} diff --git a/catalogs/lib/metadata.js b/catalogs/lib/metadata.js deleted file mode 100644 index 47a6f6e..0000000 --- a/catalogs/lib/metadata.js +++ /dev/null @@ -1,41 +0,0 @@ -import axios from 'axios'; -import { Type } from '../../addon/lib/types.js'; - -const CINEMETA_URL = 'https://v3-cinemeta.strem.io'; -const KITSU_URL = 'https://anime-kitsu.strem.fun'; -const TIMEOUT = 30000; -const MAX_SIZE = 40; - -export async function getMetas(ids, type) { - if (!ids.length || !type) { - return []; - } - - return _requestMetadata(ids, type) - .catch((error) => { - throw new Error(`failed metadata ${type} query due: ${error.message}`); - }); -} - -function _requestMetadata(ids, type) { - const url = _getUrl(ids, type); - return axios.get(url, { timeout: TIMEOUT }) - .then(response => response?.data?.metas || response?.data?.metasDetailed || []) - .then(metas => metas.filter(meta => meta)) - .then(metas => metas.map(meta => _sanitizeMeta(meta))); -} - -function _getUrl(ids, type) { - const joinedIds = ids.slice(0, MAX_SIZE).join(','); - if (type === Type.ANIME) { - return `${KITSU_URL}/catalog/${type}/kitsu-anime-list/lastVideosIds=${joinedIds}.json` - } - return `${CINEMETA_URL}/catalog/${type}/last-videos/lastVideosIds=${joinedIds}.json` -} - -function _sanitizeMeta(meta) { - delete meta.videos; - delete meta.credits_cast; - delete meta.credits_crew; - return meta; -} diff --git a/catalogs/lib/repository.js b/catalogs/lib/repository.js deleted file mode 100644 index c32dd9e..0000000 --- a/catalogs/lib/repository.js +++ /dev/null @@ -1,34 +0,0 @@ -import { Sequelize, QueryTypes } from 'sequelize'; -import { Type } from '../../addon/lib/types.js'; - -const DATABASE_URI = process.env.DATABASE_URI; - -const database = new Sequelize(DATABASE_URI, { logging: false }); - -export async function getIds(providers, type, startDate, endDate) { - const idName = type === Type.ANIME ? 'kitsuId' : 'imdbId'; - const episodeCondition = type === Type.SERIES - ? 'AND files."imdbSeason" IS NOT NULL AND files."imdbEpisode" IS NOT NULL' - : ''; - const dateCondition = startDate && endDate - ? `AND "uploadDate" BETWEEN '${startDate}' AND '${endDate}'` - : ''; - const providersCondition = providers && providers.length - ? `AND provider in (${providers.map(it => `'${it}'`).join(',')})` - : ''; - const titleCondition = type === Type.MOVIE - ? 'AND torrents.title NOT LIKE \'%[Erotic]%\'' - : ''; - const sortCondition = type === Type.MOVIE ? 'sum(torrents.seeders)' : 'max(torrents.seeders)'; - const query = `SELECT files."${idName}" - FROM (SELECT torrents."infoHash", torrents.seeders FROM torrents - WHERE seeders > 0 AND type = '${type}' ${providersCondition} ${dateCondition} ${titleCondition} - ) as torrents - JOIN files ON torrents."infoHash" = files."infoHash" - WHERE files."${idName}" IS NOT NULL ${episodeCondition} - GROUP BY files."${idName}" - ORDER BY ${sortCondition} DESC - LIMIT 5000` - const results = await database.query(query, { type: QueryTypes.SELECT }); - return results.map(result => `${result.imdbId || result.kitsuId}`); -} diff --git a/catalogs/package-lock.json b/catalogs/package-lock.json deleted file mode 100644 index 33efc95..0000000 --- a/catalogs/package-lock.json +++ /dev/null @@ -1,3039 +0,0 @@ -{ - "name": "stremio-torrentio-catalogs", - "version": "1.0.3", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "stremio-torrentio-catalogs", - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "axios": "^1.6.1", - "bottleneck": "^2.19.5", - "cache-manager": "^3.4.4", - "cache-manager-mongodb": "^0.3.0", - "moment": "^2.29.4", - "pg": "^8.8.0", - "pg-hstore": "^2.3.4", - "request-ip": "^3.3.0", - "sequelize": "^6.29.0", - "stremio-addon-sdk": "^1.6.10" - }, - "engines": { - "node": "16.x" - } - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - }, - "node_modules/@types/validator": { - "version": "13.7.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.3.tgz", - "integrity": "sha512-DNviAE5OUcZ5s+XEQHRhERLg8fOp8gSgvyJ4aaFASx5wwaObm+PBwTIMXiOFm1QrSee5oYwEAYb7LMzX2O88gA==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", - "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", - "dependencies": { - "async": "3.2.3", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "6.0.0" - } - }, - "node_modules/cache-manager-mongodb": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/cache-manager-mongodb/-/cache-manager-mongodb-0.3.0.tgz", - "integrity": "sha512-r+piWvu8XD8ceBWflZBEQZKemksoaL1V5zSHWyviVTXiGBSVQAf18b4S1v5UwGZMJnrMk8YNFgpBlugF0nuhvg==", - "dependencies": { - "bluebird": "^3.5.3", - "cache-manager": "^2.9.0", - "lodash": "^4.17.15", - "mongodb": "^3.6.3" - } - }, - "node_modules/cache-manager-mongodb/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/cache-manager-mongodb/node_modules/cache-manager": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz", - "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==", - "dependencies": { - "async": "1.5.2", - "lodash.clonedeep": "4.5.0", - "lru-cache": "4.0.0" - } - }, - "node_modules/cache-manager-mongodb/node_modules/lru-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", - "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", - "dependencies": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "node_modules/cache-manager-mongodb/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dottie": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", - "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.40", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", - "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz", - "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optional-require": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.7.tgz", - "integrity": "sha512-cIeRZocXsZnZYn+SevbtSqNlLbeoS4mLzuNn4fvXRMDRNhTGg0sxuKXl0FnZCtnew85LorNxIbZp5OeliILhMw==", - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/pg": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", - "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.5.2", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "node_modules/pg-hstore": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", - "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", - "dependencies": { - "underscore": "^1.13.1" - }, - "engines": { - "node": ">= 0.8.x" - } - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", - "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "dependencies": { - "split2": "^3.1.1" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/request-ip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", - "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/retry-as-promised": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", - "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" - }, - "node_modules/router": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.4.tgz", - "integrity": "sha512-a5uZFwgKExBZzh4U5jujU05DkImy9/ub8omiU7RlZlNnSF07tjvNJTOgHdZOjKDeUZqlkpz8CjDoz5SY3kimOA==", - "dependencies": { - "array-flatten": "3.0.0", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router/node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" - }, - "node_modules/run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "dependencies": { - "is-promise": "^2.1.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/sequelize": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.29.0.tgz", - "integrity": "sha512-m8Wi90rs3NZP9coXE52c7PL4Q078nwYZXqt1IxPvgki7nOFn0p/F0eKsYDBXCPw9G8/BCEa6zZNk0DQUAT4ypA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/sequelize" - } - ], - "dependencies": { - "@types/debug": "^4.1.7", - "@types/validator": "^13.7.1", - "debug": "^4.3.3", - "dottie": "^2.0.2", - "inflection": "^1.13.2", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "moment-timezone": "^0.5.35", - "pg-connection-string": "^2.5.0", - "retry-as-promised": "^7.0.3", - "semver": "^7.3.5", - "sequelize-pool": "^7.1.0", - "toposort-class": "^1.0.1", - "uuid": "^8.3.2", - "validator": "^13.7.0", - "wkx": "^0.5.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependenciesMeta": { - "ibm_db": { - "optional": true - }, - "mariadb": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-hstore": { - "optional": true - }, - "snowflake-sdk": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "tedious": { - "optional": true - } - } - }, - "node_modules/sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/sequelize/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sequelize/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/sequelize/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stremio-addon-linter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", - "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", - "dependencies": { - "semver": "^5.5.0" - } - }, - "node_modules/stremio-addon-sdk": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", - "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", - "dependencies": { - "chalk": "^2.4.2", - "cors": "^2.8.4", - "express": "^4.16.3", - "inquirer": "^6.2.2", - "mkdirp": "^0.5.1", - "node-fetch": "^2.3.0", - "opn": "^5.4.0", - "router": "^1.3.3", - "stremio-addon-linter": "^1.7.0" - }, - "bin": { - "addon-bootstrap": "cli/bootstrap.js" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" - } - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - }, - "@types/validator": { - "version": "13.7.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.3.tgz", - "integrity": "sha512-DNviAE5OUcZ5s+XEQHRhERLg8fOp8gSgvyJ4aaFASx5wwaObm+PBwTIMXiOFm1QrSee5oYwEAYb7LMzX2O88gA==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cache-manager": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", - "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", - "requires": { - "async": "3.2.3", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "6.0.0" - } - }, - "cache-manager-mongodb": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/cache-manager-mongodb/-/cache-manager-mongodb-0.3.0.tgz", - "integrity": "sha512-r+piWvu8XD8ceBWflZBEQZKemksoaL1V5zSHWyviVTXiGBSVQAf18b4S1v5UwGZMJnrMk8YNFgpBlugF0nuhvg==", - "requires": { - "bluebird": "^3.5.3", - "cache-manager": "^2.9.0", - "lodash": "^4.17.15", - "mongodb": "^3.6.3" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "cache-manager": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz", - "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==", - "requires": { - "async": "1.5.2", - "lodash.clonedeep": "4.5.0", - "lru-cache": "4.0.0" - } - }, - "lru-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", - "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "dottie": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", - "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "moment-timezone": { - "version": "0.5.40", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", - "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "mongodb": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz", - "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==", - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optional-require": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.7.tgz", - "integrity": "sha512-cIeRZocXsZnZYn+SevbtSqNlLbeoS4mLzuNn4fvXRMDRNhTGg0sxuKXl0FnZCtnew85LorNxIbZp5OeliILhMw==", - "requires": { - "require-at": "^1.0.6" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pg": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", - "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.5.2", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - } - }, - "pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "pg-hstore": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", - "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", - "requires": { - "underscore": "^1.13.1" - } - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" - }, - "pg-pool": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", - "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "requires": {} - }, - "pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "requires": { - "split2": "^3.1.1" - } - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" - }, - "postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "requires": { - "xtend": "^4.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "request-ip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", - "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" - }, - "require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "retry-as-promised": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", - "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" - }, - "router": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.4.tgz", - "integrity": "sha512-a5uZFwgKExBZzh4U5jujU05DkImy9/ub8omiU7RlZlNnSF07tjvNJTOgHdZOjKDeUZqlkpz8CjDoz5SY3kimOA==", - "requires": { - "array-flatten": "3.0.0", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" - }, - "dependencies": { - "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" - } - } - }, - "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "sequelize": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.29.0.tgz", - "integrity": "sha512-m8Wi90rs3NZP9coXE52c7PL4Q078nwYZXqt1IxPvgki7nOFn0p/F0eKsYDBXCPw9G8/BCEa6zZNk0DQUAT4ypA==", - "requires": { - "@types/debug": "^4.1.7", - "@types/validator": "^13.7.1", - "debug": "^4.3.3", - "dottie": "^2.0.2", - "inflection": "^1.13.2", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "moment-timezone": "^0.5.35", - "pg-connection-string": "^2.5.0", - "retry-as-promised": "^7.0.3", - "semver": "^7.3.5", - "sequelize-pool": "^7.1.0", - "toposort-class": "^1.0.1", - "uuid": "^8.3.2", - "validator": "^13.7.0", - "wkx": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stremio-addon-linter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", - "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", - "requires": { - "semver": "^5.5.0" - } - }, - "stremio-addon-sdk": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", - "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", - "requires": { - "chalk": "^2.4.2", - "cors": "^2.8.4", - "express": "^4.16.3", - "inquirer": "^6.2.2", - "mkdirp": "^0.5.1", - "node-fetch": "^2.3.0", - "opn": "^5.4.0", - "router": "^1.3.3", - "stremio-addon-linter": "^1.7.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "requires": { - "@types/node": "*" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/catalogs/package.json b/catalogs/package.json deleted file mode 100644 index 6ce33a0..0000000 --- a/catalogs/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "stremio-torrentio-catalogs", - "version": "1.0.3", - "exports": "./index.js", - "type": "module", - "scripts": { - "start": "node index.js" - }, - "engines": { - "node": "16.x" - }, - "author": "TheBeastLT ", - "license": "MIT", - "dependencies": { - "axios": "^1.6.1", - "bottleneck": "^2.19.5", - "cache-manager": "^3.4.4", - "cache-manager-mongodb": "^0.3.0", - "moment": "^2.29.4", - "pg": "^8.8.0", - "pg-hstore": "^2.3.4", - "request-ip": "^3.3.0", - "sequelize": "^6.29.0", - "stremio-addon-sdk": "^1.6.10" - } -} diff --git a/catalogs/serverless.js b/catalogs/serverless.js deleted file mode 100644 index ec028bb..0000000 --- a/catalogs/serverless.js +++ /dev/null @@ -1,68 +0,0 @@ -import getRouter from 'stremio-addon-sdk/src/getRouter.js'; -import addonInterface from './addon.js'; -import qs from 'querystring'; -import { parseConfiguration } from '../addon/lib/configuration.js'; -import { createManifest } from './lib/manifest.js'; - -const router = getRouter(addonInterface); - -// router.get('/', (_, res) => { -// res.redirect('/configure') -// res.end(); -// }); -// -// router.get('/:configuration?/configure', (req, res) => { -// const configValues = parseConfiguration(req.params.configuration || ''); -// const landingHTML = landingTemplate(createManifest(configValues), configValues); -// res.setHeader('content-type', 'text/html'); -// res.end(landingHTML); -// }); - -router.get('/:configuration?/manifest.json', (req, res) => { - const configValues = parseConfiguration(req.params.configuration || ''); - const manifestBuf = JSON.stringify(createManifest(configValues)); - res.setHeader('Content-Type', 'application/json; charset=utf-8'); - res.end(manifestBuf) -}); - -router.get('/:configuration/:resource/:type/:id/:extra?.json', (req, res, next) => { - const { configuration, resource, type, id } = req.params; - const extra = req.params.extra ? qs.parse(req.url.split('/').pop().slice(0, -5)) : {} - const configValues = { ...extra, ...parseConfiguration(configuration) }; - addonInterface.get(resource, type, id, configValues) - .then(resp => { - const cacheHeaders = { - cacheMaxAge: 'max-age', - staleRevalidate: 'stale-while-revalidate', - staleError: 'stale-if-error' - }; - const cacheControl = Object.keys(cacheHeaders) - .map(prop => Number.isInteger(resp[prop]) && cacheHeaders[prop] + '=' + resp[prop]) - .filter(val => !!val).join(', '); - - res.setHeader('Cache-Control', `${cacheControl}, public`); - res.setHeader('Content-Type', 'application/json; charset=utf-8'); - res.end(JSON.stringify(resp)); - }) - .catch(err => { - if (err.noHandler) { - if (next) { - next() - } else { - res.writeHead(404); - res.end(JSON.stringify({ err: 'not found' })); - } - } else { - console.error(err); - res.writeHead(500); - res.end(JSON.stringify({ err: 'handler error' })); - } - }); -}); - -export default function (req, res) { - router(req, res, function () { - res.statusCode = 404; - res.end(); - }); -}; diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..62d7650 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,103 @@ +version: '3.8' +name: torrentio-selfhostio + +x-restart: &restart-policy + "unless-stopped" + +x-basehealth: &base-health + interval: 10s + timeout: 10s + retries: 3 + start_period: 10s + +x-rabbithealth: &rabbitmq-health + test: rabbitmq-diagnostics -q ping + <<: *base-health + +x-mongohealth: &mongodb-health + test: ["CMD","mongosh", "--eval", "db.adminCommand('ping')"] + <<: *base-health + +x-postgreshealth: &postgresdb-health + test: pg_isready + <<: *base-health + +x-apps: &selfhostio-app + depends_on: + mongodb: + condition: service_healthy + postgres: + condition: service_healthy + rabbitmq: + condition: service_healthy + restart: *restart-policy + +services: + postgres: + image: postgres:latest + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: selfhostio + PGUSER: postgres # needed for healthcheck. + ports: + - "5432:5432" + volumes: + - postgres:/var/lib/postgresql/data + healthcheck: *postgresdb-health + restart: *restart-policy + + mongodb: + image: mongo:latest + environment: + MONGO_INITDB_ROOT_USERNAME: mongo + MONGO_INITDB_ROOT_PASSWORD: mongo + ports: + - "27017:27017" + volumes: + - mongo:/data/db + restart: *restart-policy + healthcheck: *mongodb-health + + rabbitmq: + image: rabbitmq:3-management + ports: + - "5672:5672" + - "15672:15672" + volumes: + - rabbitmq:/var/lib/rabbitmq + restart: *restart-policy + healthcheck: *rabbitmq-health + + producer: + build: + context: src/producer + dockerfile: Dockerfile + env_file: + - env/producer.env + <<: *selfhostio-app + + consumer: + build: + context: src/node/consumer + dockerfile: Dockerfile + env_file: + - env/consumer.env + deploy: + replicas: 3 + <<: *selfhostio-app + + addon: + build: + context: src/node/addon + dockerfile: Dockerfile + ports: + - "7000:7000" + env_file: + - env/addon.env + <<: *selfhostio-app + +volumes: + postgres: + mongo: + rabbitmq: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7e2fef1..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,61 +0,0 @@ ---- - -version: '3.9' -name: torrentio-self-host - -services: - - mongodb: - restart: unless-stopped - image: docker.io/bitnami/mongodb:7.0 - ports: - - "27017:27017" - volumes: - - mongo-data:/bitnami/mongodb - - scraper: - build: ./scraper - restart: unless-stopped - depends_on: - - mongodb - - postgres - environment: - - PORT=7001 - - MONGODB_URI=mongodb://mongodb:27017/torrentio - - DATABASE_URI=postgres://postgres@postgres:5432/torrentio - - ENABLE_SYNC=true - - torrentio: - build: ./addon - restart: unless-stopped - depends_on: - - mongodb - - postgres - ports: - - "7000:7000" - environment: - - MONGODB_URI=mongodb://mongodb:27017/torrentio - - DATABASE_URI=postgres://postgres@postgres:5432/torrentio - - ENABLE_SYNC=true - - postgres: - image: postgres:14-alpine - restart: unless-stopped - ports: - - 5432:5432 - volumes: - - postgres-data:/var/lib/postgresql/data - environment: - - POSTGRES_HOST_AUTH_METHOD=trust - - POSTGRES_USER=postgres - - POSTGRES_DB=torrentio - - flaresolverr: - image: ghcr.io/flaresolverr/flaresolverr:latest - restart: unless-stopped - ports: - - 8191:8191 - -volumes: - mongo-data: - postgres-data: diff --git a/env/addon.env b/env/addon.env new file mode 100644 index 0000000..5bd2f3c --- /dev/null +++ b/env/addon.env @@ -0,0 +1,4 @@ +TZ=London/Europe +DATABASE_URI=postgres://postgres:postgres@postgres/selfhostio +MONGODB_URI=mongodb://mongo:mongo@mongodb/selfhostio?tls=false&authSource=admin +DEBUG_MODE=false \ No newline at end of file diff --git a/env/consumer.env b/env/consumer.env new file mode 100644 index 0000000..3ea17a8 --- /dev/null +++ b/env/consumer.env @@ -0,0 +1,11 @@ +TZ=London/Europe +MONGODB_URI=mongodb://mongo:mongo@mongodb/selfhostio?tls=false&authSource=admin +DATABASE_URI=postgres://postgres:postgres@postgres/selfhostio +RABBIT_URI=amqp://guest:guest@rabbitmq:5672/?heartbeat=30 +QUEUE_NAME=ingested +JOB_CONCURRENCY=5 +JOBS_ENABLED=true +ENABLE_SYNC=true +MAX_SINGLE_TORRENT_CONNECTIONS=10 +TORRENT_TIMEOUT=30000 +UDP_TRACKERS_ENABLED=true \ No newline at end of file diff --git a/env/producer.env b/env/producer.env new file mode 100644 index 0000000..4d6a52f --- /dev/null +++ b/env/producer.env @@ -0,0 +1,10 @@ +ScrapeConfiguration__StorageConnectionString=host=postgres;username=postgres;password=postgres;database=selfhostio; +RabbitMqConfiguration__Host=rabbitmq +RabbitMqConfiguration__QueueName=ingested +RabbitMqConfiguration__Username=guest +RabbitMqConfiguration__Password=guest +RabbitMqConfiguration__Durable=true +RabbitMqConfiguration__MaxQueueSize=0 +RabbitMqConfiguration__MaxPublishBatchSize=500 +RabbitMqConfiguration__PublishIntervalInSeconds=10 +GithubSettings__PAT= \ No newline at end of file diff --git a/scraper/Dockerfile b/scraper/Dockerfile deleted file mode 100644 index 9aaf66a..0000000 --- a/scraper/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:16-alpine - -RUN apk update && apk upgrade && \ - apk add --no-cache git - -WORKDIR /home/node/app - -COPY package*.json ./ -RUN npm ci --only-production -COPY . . - -CMD [ "node", "--insecure-http-parser", "index.js" ] \ No newline at end of file diff --git a/scraper/README.md b/scraper/README.md deleted file mode 100644 index d49c360..0000000 --- a/scraper/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Torrentio Scraper - -## Initial dumps - -### The Pirate Bay - -https://mega.nz/#F!tktzySBS!ndSEaK3Z-Uc3zvycQYxhJA - -https://thepiratebay.org/static/dump/csv/ - -### Kickass - -https://mega.nz/#F!tktzySBS!ndSEaK3Z-Uc3zvycQYxhJA - -https://web.archive.org/web/20150416071329/http://kickass.to/api - -### RARBG - -Scrape movie and tv catalog using [www.webscraper.io](https://www.webscraper.io/) for available `imdbIds` and use those via the api to search for torrents. - -Movies sitemap -```json -{"_id":"rarbg-movies","startUrl":["https://rarbgmirror.org/catalog/movies/[1-4235]"],"selectors":[{"id":"rarbg-movie-imdb-id","type":"SelectorHTML","parentSelectors":["_root"],"selector":".lista-rounded table td[width='110']","multiple":true,"regex":"tt[0-9]+","delay":0}]} -``` - -TV sitemap -```json -{"_id":"rarbg-tv","startUrl":["https://rarbgmirror.org/catalog/tv/[1-609]"],"selectors":[{"id":"rarbg-tv-imdb-id","type":"SelectorHTML","parentSelectors":["_root"],"selector":".lista-rounded table td[width='110']","multiple":true,"regex":"tt[0-9]+","delay":0}]} -``` - -### Migrating Database - -When migrating database to a new one it is important to alter the `files_id_seq` sequence to the maximum file id value plus 1. - -```sql -ALTER SEQUENCE files_id_seq RESTART WITH ; -``` \ No newline at end of file diff --git a/scraper/index.js b/scraper/index.js deleted file mode 100644 index 3ad1aa1..0000000 --- a/scraper/index.js +++ /dev/null @@ -1,14 +0,0 @@ -const express = require("express"); -const server = express(); -const { connect } = require('./lib/repository'); -const { startScraper } = require('./scheduler/scheduler') - -server.get('/', function (req, res) { - res.sendStatus(200); -}); - -server.listen(process.env.PORT || 7000, async () => { - await connect(); - console.log('Scraper started'); - startScraper(); -}); \ No newline at end of file diff --git a/scraper/lib/cache.js b/scraper/lib/cache.js deleted file mode 100644 index f8a1740..0000000 --- a/scraper/lib/cache.js +++ /dev/null @@ -1,72 +0,0 @@ -const cacheManager = require('cache-manager'); -const mangodbStore = require('cache-manager-mongodb'); - -const GLOBAL_KEY_PREFIX = 'stremio-torrentio'; -const IMDB_ID_PREFIX = `${GLOBAL_KEY_PREFIX}|imdb_id`; -const KITSU_ID_PREFIX = `${GLOBAL_KEY_PREFIX}|kitsu_id`; -const METADATA_PREFIX = `${GLOBAL_KEY_PREFIX}|metadata`; -const TRACKERS_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|trackers`; - -const GLOBAL_TTL = process.env.METADATA_TTL || 7 * 24 * 60 * 60; // 7 days -const MEMORY_TTL = process.env.METADATA_TTL || 2 * 60 * 60; // 2 hours -const TRACKERS_TTL = 2 * 24 * 60 * 60; // 2 days - -const MONGO_URI = process.env.MONGODB_URI; - -const memoryCache = initiateMemoryCache(); -const remoteCache = initiateRemoteCache(); - -function initiateRemoteCache() { - if (MONGO_URI) { - return cacheManager.caching({ - store: mangodbStore, - uri: MONGO_URI, - options: { - collection: 'torrentio_scraper_collection', - useUnifiedTopology: true - }, - ttl: GLOBAL_TTL, - ignoreCacheErrors: true - }); - } else { - return cacheManager.caching({ - store: 'memory', - ttl: GLOBAL_TTL - }); - } -} - -function initiateMemoryCache() { - return cacheManager.caching({ - store: 'memory', - ttl: MEMORY_TTL - }); -} - -function cacheWrap(cache, key, method, options) { - return cache.wrap(key, method, options); -} - -function cacheWrapImdbId(key, method) { - return cacheWrap(remoteCache, `${IMDB_ID_PREFIX}:${key}`, method, { ttl: GLOBAL_TTL }); -} - -function cacheWrapKitsuId(key, method) { - return cacheWrap(remoteCache, `${KITSU_ID_PREFIX}:${key}`, method, { ttl: GLOBAL_TTL }); -} - -function cacheWrapMetadata(id, method) { - return cacheWrap(memoryCache, `${METADATA_PREFIX}:${id}`, method, { ttl: MEMORY_TTL }); -} - -function cacheTrackers(method) { - return cacheWrap(memoryCache, `${TRACKERS_KEY_PREFIX}`, method, { ttl: TRACKERS_TTL }); -} - -module.exports = { - cacheWrapImdbId, - cacheWrapKitsuId, - cacheWrapMetadata, - cacheTrackers -}; - diff --git a/scraper/lib/requestHelper.js b/scraper/lib/requestHelper.js deleted file mode 100644 index fce6ea5..0000000 --- a/scraper/lib/requestHelper.js +++ /dev/null @@ -1,24 +0,0 @@ -const UserAgent = require('user-agents'); -const userAgent = new UserAgent(); - -function getRandomUserAgent() { - return userAgent.random().toString(); -} - -function defaultOptionsWithProxy() { - if (process.env.PROXY_HOST && process.env.PROXY_TYPE) { - return { - proxy: { - host: process.env.PROXY_HOST.match(/\/\/(.*):/)[1], - port: process.env.PROXY_HOST.match(/:(\d+)/)[1] - }, - headers: { - 'user-agent': getRandomUserAgent(), - 'proxy-type': process.env.PROXY_TYPE - } - } - } - return { headers: { 'user-agent': getRandomUserAgent() } }; -} - -module.exports = { getRandomUserAgent, defaultOptionsWithProxy }; \ No newline at end of file diff --git a/scraper/lib/torrent.js b/scraper/lib/torrent.js deleted file mode 100644 index 6c53370..0000000 --- a/scraper/lib/torrent.js +++ /dev/null @@ -1,208 +0,0 @@ -const torrentStream = require('torrent-stream'); -const axios = require('axios'); -const parseTorrent = require('parse-torrent'); -const BTClient = require('bittorrent-tracker') -const async = require('async'); -const decode = require('magnet-uri'); -const { Type } = require('./types'); -const { delay } = require('./promises') -const { isVideo, isSubtitle } = require('./extension'); -const { cacheTrackers } = require('./cache'); - -const TRACKERS_URL = 'https://ngosang.github.io/trackerslist/trackers_all.txt'; -const MAX_PEER_CONNECTIONS = process.env.MAX_PEER_CONNECTIONS || 20; -const SEEDS_CHECK_TIMEOUT = 15 * 1000; // 15 secs -const ADDITIONAL_TRACKERS = [ - 'http://tracker.trackerfix.com:80/announce', - 'udp://9.rarbg.me:2780', - 'udp://9.rarbg.to:2870' -]; -const ANIME_TRACKERS = [ - "http://nyaa.tracker.wf:7777/announce", - "udp://anidex.moe:6969/announce", - "udp://tracker-udp.anirena.com:80/announce", - "udp://tracker.uw0.xyz:6969/announce" -]; - -async function updateCurrentSeeders(torrentsInput) { - return new Promise(async (resolve) => { - const torrents = Array.isArray(torrentsInput) ? torrentsInput : [torrentsInput]; - const perTorrentResults = Object.fromEntries(new Map(torrents.map(torrent => [torrent.infoHash, {}]))); - const perTrackerInfoHashes = await Promise.all(torrents.map(torrent => getTorrentTrackers(torrent) - .then(torrentTrackers => ({ infoHash: torrent.infoHash, trackers: torrentTrackers })))) - .then(allTorrentTrackers => allTorrentTrackers - .reduce((allTrackersMap, torrentTrackers) => { - torrentTrackers.trackers.forEach(tracker => - allTrackersMap[tracker] = (allTrackersMap[tracker] || []).concat(torrentTrackers.infoHash)); - return allTrackersMap; - }, {})); - let successCounter = 0; - const callback = () => { - console.log(`Total successful tracker responses: ${successCounter}`) - resolve(perTorrentResults); - } - setTimeout(callback, SEEDS_CHECK_TIMEOUT); - - async.each(Object.keys(perTrackerInfoHashes), function (tracker, ready) { - BTClient.scrape({ infoHash: perTrackerInfoHashes[tracker], announce: tracker }, (error, response) => { - if (response) { - const results = Array.isArray(torrentsInput) ? Object.entries(response) : [[response.infoHash, response]]; - results - .filter(([infoHash]) => perTorrentResults[infoHash]) - .forEach(([infoHash, seeders]) => - perTorrentResults[infoHash][tracker] = [seeders.complete, seeders.incomplete]) - successCounter++; - } else if (error) { - perTrackerInfoHashes[tracker] - .filter(infoHash => perTorrentResults[infoHash]) - .forEach(infoHash => perTorrentResults[infoHash][tracker] = [0, 0, error.message]) - } - ready(); - }) - }, callback); - }).then(perTorrentResults => { - const torrents = Array.isArray(torrentsInput) ? torrentsInput : [torrentsInput]; - torrents.forEach(torrent => { - const results = perTorrentResults[torrent.infoHash]; - const newSeeders = Math.max(...Object.values(results).map(values => values[0]).concat(0)); - if (torrent.seeders !== newSeeders) { - console.log(`Updating seeders for [${torrent.infoHash}] ${torrent.title} - ${torrent.seeders} -> ${newSeeders}`) - torrent.seeders = newSeeders; - } - }) - return torrentsInput; - }); -} - -async function updateTorrentSize(torrent) { - return filesAndSizeFromTorrentStream(torrent, SEEDS_CHECK_TIMEOUT) - .then(result => { - torrent.size = result.size; - torrent.files = result.files; - return torrent; - }); -} - -async function sizeAndFiles(torrent) { - return filesAndSizeFromTorrentStream(torrent, 30000); -} - -async function torrentFiles(torrent, timeout) { - return getFilesFromObject(torrent) - .catch(() => filesFromTorrentFile(torrent)) - .catch(() => filesFromTorrentStream(torrent, timeout)) - .then(files => ({ - contents: files, - videos: filterVideos(files), - subtitles: filterSubtitles(files) - })); -} - -function getFilesFromObject(torrent) { - if (Array.isArray(torrent.files)) { - return Promise.resolve(torrent.files); - } - if (typeof torrent.files === 'function') { - return torrent.files(); - } - return Promise.reject("No files in the object"); -} - -async function filesFromTorrentFile(torrent) { - if (!torrent.torrentLink) { - return Promise.reject(new Error("no torrentLink")); - } - - return axios.get(torrent.torrentLink, { timeout: 10000, responseType: 'arraybuffer' }) - .then((response) => { - if (!response.data || response.status !== 200) { - throw new Error('torrent not found') - } - return response.data - }) - .then((body) => parseTorrent(body)) - .then((info) => info.files.map((file, fileId) => ({ - fileIndex: fileId, - name: file.name, - path: file.path.replace(/^[^\/]+\//, ''), - size: file.length - }))); -} - -async function filesFromTorrentStream(torrent, timeout) { - return filesAndSizeFromTorrentStream(torrent, timeout).then(result => result.files); -} - -function filesAndSizeFromTorrentStream(torrent, timeout = 30000) { - if (!torrent.infoHash && !torrent.magnetLink) { - return Promise.reject(new Error("no infoHash or magnetLink")); - } - const magnet = torrent.magnetLink || decode.encode({ infoHash: torrent.infoHash, announce: torrent.trackers }); - return new Promise((resolve, rejected) => { - const engine = new torrentStream(magnet, { connections: MAX_PEER_CONNECTIONS }); - - engine.ready(() => { - const files = engine.files - .map((file, fileId) => ({ - fileIndex: fileId, - name: file.name, - path: file.path.replace(/^[^\/]+\//, ''), - size: file.length - })); - const size = engine.torrent.length; - - engine.destroy(); - resolve({ files, size }); - }); - setTimeout(() => { - engine.destroy(); - rejected(new Error('No available connections for torrent!')); - }, timeout); - }); -} - -function filterVideos(files) { - if (files.length === 1 && !Number.isInteger(files[0].fileIndex)) { - return files; - } - const videos = files.filter(file => isVideo(file.path)); - const maxSize = Math.max(...videos.map(video => video.size)); - const minSampleRatio = videos.length <= 3 ? 3 : 10; - const minAnimeExtraRatio = 5; - const minRedundantRatio = videos.length <= 3 ? 30 : Number.MAX_VALUE; - const isSample = video => video.path.match(/sample|bonus|promo/i) && maxSize / parseInt(video.size) > minSampleRatio; - const isRedundant = video => maxSize / parseInt(video.size) > minRedundantRatio; - const isExtra = video => video.path.match(/extras?\//i); - const isAnimeExtra = video => video.path.match(/(?:\b|_)(?:NC)?(?:ED|OP|PV)(?:v?\d\d?)?(?:\b|_)/i) - && maxSize / parseInt(video.size) > minAnimeExtraRatio; - const isWatermark = video => video.path.match(/^[A-Z-]+(?:\.[A-Z]+)?\.\w{3,4}$/) - && maxSize / parseInt(video.size) > minAnimeExtraRatio - return videos - .filter(video => !isSample(video)) - .filter(video => !isExtra(video)) - .filter(video => !isAnimeExtra(video)) - .filter(video => !isRedundant(video)) - .filter(video => !isWatermark(video)); -} - -function filterSubtitles(files) { - return files.filter(file => isSubtitle(file.path)); -} - -async function getTorrentTrackers(torrent) { - const magnetTrackers = torrent.magnetLink && decode(torrent.magnetLink).tr || []; - const torrentTrackers = torrent.trackers && torrent.trackers.split(',') || []; - const defaultTrackers = await getDefaultTrackers(torrent); - return Array.from(new Set([].concat(magnetTrackers).concat(torrentTrackers).concat(defaultTrackers))); -} - -async function getDefaultTrackers(torrent, retry = 3) { - return cacheTrackers(() => axios.get(TRACKERS_URL, { timeout: SEEDS_CHECK_TIMEOUT }) - .then(response => response.data && response.data.trim()) - .then(body => body && body.split('\n\n') || [])) - .catch(() => retry > 0 ? delay(5000).then(() => getDefaultTrackers(torrent, retry - 1)) : []) - .then(trackers => trackers.concat(ADDITIONAL_TRACKERS)) - .then(trackers => torrent.type === Type.ANIME ? trackers.concat(ANIME_TRACKERS) : trackers); -} - -module.exports = { updateCurrentSeeders, updateTorrentSize, sizeAndFiles, torrentFiles } diff --git a/scraper/lib/types.js b/scraper/lib/types.js deleted file mode 100644 index 2f37a8e..0000000 --- a/scraper/lib/types.js +++ /dev/null @@ -1,5 +0,0 @@ -exports.Type = { - MOVIE: 'movie', - SERIES: 'series', - ANIME: 'anime' -}; \ No newline at end of file diff --git a/scraper/manual/manual.js b/scraper/manual/manual.js deleted file mode 100644 index b7380d9..0000000 --- a/scraper/manual/manual.js +++ /dev/null @@ -1,145 +0,0 @@ -const Bottleneck = require('bottleneck'); -const { parse } = require('parse-torrent-title'); -const Promises = require('../lib/promises'); -const { mostCommonValue } = require('../lib/promises'); -const repository = require('../lib/repository'); -const { getImdbId, getKitsuId } = require('../lib/metadata'); -const { parseTorrentFiles } = require('../lib/torrentFiles'); -const { createTorrentContents } = require('../lib/torrentEntries'); -const { assignSubtitles } = require('../lib/torrentSubtitles'); -const { Type } = require('../lib/types'); - -const limiter = new Bottleneck({ maxConcurrent: 40 }); - -async function updateMovieCollections() { - const collectionFiles = await repository.getFilesBasedOnTitle('logy') - .then(files => files.filter(file => file.fileIndex === null)) - .then(files => files.filter(file => parse(file.title).complete)); - - collectionFiles.map(original => repository.getTorrent({ infoHash: original.infoHash }) - .then(torrent => parseTorrentFiles({ ...torrent.get(), imdbId: original.imdbId })) - .then(files => Promise.all(files.map(file => { - console.log(file); - return repository.createFile(file) - }))) - .then(createdFiled => { - if (createdFiled && createdFiled.length) { - console.log(`Updated movie collection ${original.title}`); - repository.deleteFile(original) - } else { - console.log(`Failed updating movie collection ${original.title}`); - } - })); -} - -async function reapplySeriesSeasonsSavedAsMovies() { - return repository.getTorrentsBasedOnTitle('(?:[^a-zA-Z0-9]|^)[Ss][012]?[0-9](?:[^0-9]|$)', Type.MOVIE) - .then(torrents => Promise.all(torrents - .filter(torrent => parse(torrent.title).seasons) - .map(torrent => limiter.schedule(() => reapplyEpisodeDecomposing(torrent.infoHash, false) - .then(() => { - torrent.type = Type.SERIES; - return torrent.save(); - }))))) - .then(() => console.log('Finished updating multiple torrents')); -} - -async function reapplyDecomposingToTorrentsOnRegex(regex) { - return repository.getTorrentsBasedOnTitle(regex, Type.ANIME) - .then(torrents => Promise.all(torrents - .map(torrent => limiter.schedule(() => reapplyEpisodeDecomposing(torrent.infoHash, true))))) - .then(() => console.log('Finished updating multiple torrents')); -} - -async function reapplyEpisodeDecomposing(infoHash, includeSourceFiles = true) { - const torrent = await repository.getTorrent({ infoHash }); - const storedFiles = await repository.getFiles({ infoHash }); - const fileIndexMap = storedFiles - .reduce((map, next) => { - const fileIndex = next.fileIndex !== undefined ? next.fileIndex : null; - map[fileIndex] = (map[fileIndex] || []).concat(next); - return map; - }, {}); - const files = includeSourceFiles && Object.values(fileIndexMap) - .map(sameIndexFiles => sameIndexFiles[0]) - .map(file => ({ - fileIndex: file.fileIndex, - name: file.title.replace(/.*\//, ''), - path: file.title, - size: file.size - })); - const kitsuId = undefined; - const imdbId = kitsuId - ? undefined - : mostCommonValue(storedFiles.map(file => file.imdbId)) - || await getImdbId(parse(torrent.title)).catch(() => undefined); - - if (!imdbId && !kitsuId) { - console.log(`imdbId or kitsuId not found: ${torrent.provider} ${torrent.title}`); - return Promise.resolve(); - } - - return parseTorrentFiles({ ...torrent.get(), imdbId, kitsuId, files }) - .then(torrentContents => torrentContents.videos) - .then(newFiles => newFiles.map(file => { - const fileIndex = file.fileIndex !== undefined ? file.fileIndex : null; - const mapping = fileIndexMap[fileIndex]; - if (mapping) { - const originalFile = mapping.shift(); - if (originalFile) { - if (!originalFile.imdbId) { - originalFile.imdbId = file.imdbId - } - originalFile.imdbSeason = file.imdbSeason; - originalFile.imdbEpisode = file.imdbEpisode; - originalFile.kitsuId = file.kitsuId; - originalFile.kitsuEpisode = file.kitsuEpisode; - return originalFile; - } - } - return file; - })) - .then(updatedFiles => Promise.all(updatedFiles - .map(file => file.id ? file.save() : repository.createFile(file)))) - .then(() => console.log(`Updated files for [${torrent.infoHash}] ${torrent.title}`)); -} - -async function assignSubs() { - const unassignedSubs = await repository.getUnassignedSubtitles() - .then(subs => subs.reduce((map, sub) => { - map[sub.infoHash] = (map[sub.infoHash] || []).concat(sub); - return map; - }, {})); - const infoHashes = Object.keys(unassignedSubs); - - return Promise.all(infoHashes.map(async infoHash => { - const videos = await repository.getFiles({ infoHash }); - const subtitles = unassignedSubs[infoHash]; - const assignedContents = assignSubtitles({ videos, subtitles }); - return Promise.all(assignedContents.videos - .filter(video => video.subtitles) - .map(video => repository.upsertSubtitles(video, video.subtitles))); - })); -} - -async function openTorrentContents() { - const limiter = new Bottleneck({ maxConcurrent: 15 }); - const unopenedTorrents = await repository.getNoContentsTorrents(); - - return Promise.all(unopenedTorrents.map(torrent => limiter.schedule(() => createTorrentContents(torrent)))) - .then(() => unopenedTorrents.length === 500 ? openTorrentContents() : Promise.resolve) -} - -// const infoHashes = [ -// ] -// Promises.sequence(infoHashes.map(infoHash => () => reapplyEpisodeDecomposing(infoHash))) -// .then(() => console.log('Finished')); - -//findAllFiles().then(() => console.log('Finished')); -//updateMovieCollections().then(() => console.log('Finished')); -reapplyEpisodeDecomposing('96cc18f564f058384c18b4966a183d81808ce3fb', true).then(() => console.log('Finished')); -//reapplySeriesSeasonsSavedAsMovies().then(() => console.log('Finished')); -//reapplyDecomposingToTorrentsOnRegex('.*Title.*').then(() => console.log('Finished')); -//reapplyManualHashes().then(() => console.log('Finished')); -// assignSubs().then(() => console.log('Finished')); -// openTorrentContents().then(() => console.log('Finished')); \ No newline at end of file diff --git a/scraper/scheduler/scheduler.js b/scraper/scheduler/scheduler.js deleted file mode 100644 index b9816a5..0000000 --- a/scraper/scheduler/scheduler.js +++ /dev/null @@ -1,14 +0,0 @@ -const { scheduleScraping, scrapeAll } = require('./scraper') -const { scheduleUpdateSeeders, scheduleUpdateSeedersForNewTorrents } = require('./seeders') - -function startScraper() { - if (process.env.ENABLE_SCHEDULING) { - scheduleScraping(); - scheduleUpdateSeeders(); - scheduleUpdateSeedersForNewTorrents(); - } else { - scrapeAll() - } -} - -module.exports = { startScraper } \ No newline at end of file diff --git a/scraper/scheduler/scraper.js b/scraper/scheduler/scraper.js deleted file mode 100644 index 3f06643..0000000 --- a/scraper/scheduler/scraper.js +++ /dev/null @@ -1,28 +0,0 @@ -const schedule = require('node-schedule'); -const scrapers = require('./scrapers'); -const { sequence } = require('../lib/promises') - -function scheduleScraping() { - const allCrons = scrapers.reduce((crons, provider) => { - crons[provider.cron] = (crons[provider.cron] || []).concat(provider) - return crons; - }, {}); - Object.entries(allCrons).forEach(([cron, providers]) => schedule.scheduleJob(cron, () => _scrapeProviders(providers))) -} - -function scrapeAll() { - return _scrapeProviders(scrapers) -} - -async function _scrapeProviders(providers) { - return sequence(providers.map(provider => () => _singleScrape(provider))); -} - -async function _singleScrape(provider) { - return provider.scraper.scrape().catch(error => { - console.warn(`Failed ${provider.name} scraping due: `, error); - return Promise.resolve() - }) -} - -module.exports = { scheduleScraping, scrapeAll } \ No newline at end of file diff --git a/scraper/scheduler/scrapers.js b/scraper/scheduler/scrapers.js deleted file mode 100644 index 22e5bcb..0000000 --- a/scraper/scheduler/scrapers.js +++ /dev/null @@ -1,47 +0,0 @@ -// const thepiratebayScraper = require('../scrapers/thepiratebay/thepiratebay_scraper'); -// const thepiratebayFakeRemoval = require('../scrapers/thepiratebay/thepiratebay_fakes_removal'); -const ytsScraper = require('../scrapers/yts/yts_scraper'); -const ytsFullScraper = require('../scrapers/yts/yts_full_scraper'); -const eztvScraper = require('../scrapers/eztv/eztv_scraper'); -const leetxScraper = require('../scrapers/1337x/1337x_scraper'); -// const rarbgScraper = require('../scrapers/rarbg/rarbg_scraper'); -const nyaaPantsuScraper = require('../scrapers/nyaapantsu/nyaa_pantsu_scraper'); -const nyaaSiScraper = require('../scrapers/nyaasi/nyaa_si_scraper'); -// const erairawsScraper = require('../scrapers/erairaws/erairaws_scraper'); -// const torrentGalaxyScraper = require('../scrapers/torrentgalaxy/torrentgalaxy_scraper'); -// const rutorScraper = require('../scrapers/rutor/rutor_scraper'); -// const Comando = require('../scrapers/comando/comando_scraper') -// const ComoEuBaixo = require('../scrapers/comoeubaixo/comoeubaixo_scraper') -// const Lapumia = require('../scrapers/lapumia/lapumia_scraper') -// const OndeBaixa = require('../scrapers/ondebaixa/ondebaixa_scraper'); -// const AnimesTorrent = require('../scrapers/animestorrent/animestorrent_scraper') -// const DarkMahou = require('../scrapers/darkmahou/darkmahou_scraper') -// const torrent9Scraper = require('../scrapers/torrent9/torrent9_scraper'); - -module.exports = [ - { scraper: ytsScraper, name: ytsScraper.NAME, cron: '0 0 */4 ? * *' }, - { scraper: ytsFullScraper, name: ytsFullScraper.NAME, cron: '0 0 0 * * 0' }, - { scraper: eztvScraper, name: eztvScraper.NAME, cron: '0 0 */4 ? * *' }, - { scraper: nyaaSiScraper, name: nyaaSiScraper.NAME, cron: '0 0 */4 ? * *' }, - { scraper: nyaaPantsuScraper, name: nyaaPantsuScraper.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: rarbgScraper, name: rarbgScraper.NAME, cron: '0 0 */1 ? * *' }, - // { scraper: rutorScraper, name: rutorScraper.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: thepiratebayScraper, name: thepiratebayScraper.NAME, cron: '0 0 */2 ? * *' }, - // { scraper: thepiratebayFakeRemoval, name: thepiratebayFakeRemoval.NAME, cron: '0 0 */12 ? * *' }, - // { scraper: torrentGalaxyScraper, name: torrentGalaxyScraper.NAME, cron: '0 0 */4 ? * *' }, - { scraper: leetxScraper, name: leetxScraper.NAME, cron: '0 0 */4 ? * *' } - // { scraper: torrent9Scraper, name: torrent9Scraper.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: Comando, name: Comando.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: ComoEuBaixo, name: ComoEuBaixo.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: Lapumia, name: Lapumia.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: OndeBaixa, name: OndeBaixa.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: AnimesTorrent, name: AnimesTorrent.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: DarkMahou, name: DarkMahou.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: erairawsScraper, name: erairawsScraper.NAME, cron: '0 0 */4 ? * *' }, - // { scraper: require('../scrapers/rarbg/rarbg_dump_scraper') } - // { scraper: require('../scrapers/1337x/1337x_search_scraper') } - // { scraper: require('../scrapers/rarbg/rarbg_dump_scraper') } - // { scraper: require('../scrapers/thepiratebay/thepiratebay_dump_scraper') } - // { scraper: require('../scrapers/thepiratebay/thepiratebay_unofficial_dump_scraper') } - // { scraper: require('../scrapers/thepiratebay/thepiratebay_update_size_scraper') } -]; diff --git a/scraper/scheduler/seeders.js b/scraper/scheduler/seeders.js deleted file mode 100644 index b7b3e4f..0000000 --- a/scraper/scheduler/seeders.js +++ /dev/null @@ -1,64 +0,0 @@ -const Bottleneck = require('bottleneck'); -const repository = require('../lib/repository') -const { delay } = require('../lib/promises') -const { updateCurrentSeeders } = require('../lib/torrent') -const { updateTorrentSeeders } = require('../lib/torrentEntries') - -const DELAY_MS = 0; // 0 seconds -const DELAY_NEW_MS = 30_000; // 30 seconds -const DELAY_NO_NEW_MS = 300_000; // 300 seconds -const DELAY_FAILED_TORRENTS_MS = 5_000; // 5 seconds -const updateLimiter = new Bottleneck({ maxConcurrent: 5 }); -const statistics = {}; -const statisticsNew = {}; - -function scheduleUpdateSeeders() { - console.log('Starting seeders update...') - getTorrents() - .then(torrents => updateCurrentSeeders(torrents)) - .then(updatedTorrents => Promise.all( - updatedTorrents.map(updated => updateLimiter.schedule(() => updateTorrentSeeders(updated))))) - .then(torrents => updateStatistics(torrents, statistics)) - .then(() => console.log('Finished seeders update:', statistics)) - .catch(error => console.warn('Failed seeders update:', error)) - .then(() => delay(DELAY_MS)) - .then(() => scheduleUpdateSeeders()); -} - -function scheduleUpdateSeedersForNewTorrents() { - console.log('Starting seeders update for new torrents...') - getNewTorrents() - .then(torrents => updateCurrentSeeders(torrents)) - .then(updatedTorrents => Promise.all( - updatedTorrents.map(updated => updateLimiter.schedule(() => updateTorrentSeeders(updated))))) - .then(torrents => updateStatistics(torrents, statisticsNew)) - .then(() => console.log('Finished seeders update for new torrents:', statisticsNew)) - .catch(error => console.warn('Failed seeders update for new torrents:', error)) - .then(() => delay(DELAY_NEW_MS)) - .then(() => scheduleUpdateSeedersForNewTorrents()); -} - -async function getTorrents() { - return repository.getUpdateSeedersTorrents() - .catch(() => delay(DELAY_FAILED_TORRENTS_MS).then(() => getTorrents())); -} - -async function getNewTorrents() { - return repository.getUpdateSeedersNewTorrents() - .catch(() => delay(DELAY_FAILED_TORRENTS_MS).then(() => getNewTorrents())) - .then(torrents => { - if (!torrents.length) { - console.log('No new torrents to update seeders') - return delay(DELAY_NO_NEW_MS).then(() => getNewTorrents()) - } - return torrents; - }); -} - -function updateStatistics(updatedTorrents, statisticsObject) { - const totalTorrents = updatedTorrents.map(nested => nested.length).reduce((a, b) => a + b, 0); - const date = new Date().toISOString().replace(/T.*/, ''); - statisticsObject[date] = (statisticsObject[date] || 0) + totalTorrents; -} - -module.exports = { scheduleUpdateSeeders, scheduleUpdateSeedersForNewTorrents } \ No newline at end of file diff --git a/scraper/scrapers/1337x/1337x_api.js b/scraper/scrapers/1337x/1337x_api.js deleted file mode 100644 index 0a979cc..0000000 --- a/scraper/scrapers/1337x/1337x_api.js +++ /dev/null @@ -1,206 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const Sugar = require('sugar-date'); -const decode = require('magnet-uri'); -const Promises = require('../../lib/promises'); -const { escapeHTML } = require('../../lib/metadata'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { parseSize } = require("../scraperHelper"); - -const defaultProxies = [ - 'https://1337x.to' -]; -const defaultTimeout = 50000; -const maxSearchPage = 50; - -let FlaresolverrUserAgent = ''; -let FlaresolverrCookies = ''; - -const Categories = { - MOVIE: 'Movies', - TV: 'TV', - ANIME: 'Anime', - DOCUMENTARIES: 'Documentaries', - APPS: 'Apps', - GAMES: 'Games', - MUSIC: 'Music', - PORN: 'XXX', - OTHER: 'Other', -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const proxyList = config.proxyList || defaultProxies; - const slug = torrentId.startsWith('/torrent/') ? torrentId.replace('/torrent/', '') : torrentId; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/torrent/${slug}`, config))) - .then((body) => parseTorrentPage(body)) - .then((torrent) => ({ torrentId: slug, ...torrent })) - .catch((err) => torrent(slug, config, retries - 1)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - const extendToPage = Math.min(maxSearchPage, (config.extendToPage || 1)) - const requestUrl = proxyUrl => category - ? `${proxyUrl}/category-search/${keyword}/${category}/${page}/` - : `${proxyUrl}/search/${keyword}/${page}/`; - - return Promises.first(proxyList - .map(proxyUrl => singleRequest(requestUrl(proxyUrl), config))) - .then(body => parseTableBody(body)) - .then(torrents => torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - const sort = config.sort; - const requestUrl = proxyUrl => sort - ? `${proxyUrl}/sort-cat/${category}/${sort}/desc/${page}/` - : `${proxyUrl}/cat/${category}/${page}/`; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(requestUrl(proxyUrl), config))) - .then((body) => parseTableBody(body)) - .catch((err) => { - console.error(err); - browse(config, retries - 1); - }); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - let options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - if (FlaresolverrUserAgent === '' || FlaresolverrCookies === '') { - console.log("using flaresolverr"); - return axios.post('http://flaresolverr:8191/v1', { - cmd: 'request.get', - url: requestUrl, - }, options) - .then((response) => { - if (response.data.status !== 'ok') { - throw new Error(`FlareSolverr did not return status 'ok': ${response.data.message}`) - } - - const body = response.data.solution.response; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden') || - !(body.includes('1337x'))) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - FlaresolverrUserAgent = response.data.solution.userAgent; - response.data.solution.cookies.forEach(cookie => { - FlaresolverrCookies = FlaresolverrCookies + `${cookie.name}=${cookie.value}; `; - }); - - return body; - }); - } - else { - console.log("using direct request"); - options.headers['User-Agent'] = FlaresolverrUserAgent; - options.headers['Cookie'] = FlaresolverrCookies; - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden') || - !(body.includes('1337x'))) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }) - } -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('.table > tbody > tr').each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find('a').eq(1).text(), - torrentId: row.find('a').eq(1).attr('href').replace('/torrent/', ''), - seeders: parseInt(row.children('td.coll-2').text()), - leechers: parseInt(row.children('td.coll-3').text()), - size: parseSize(row.children('td.coll-4').text()) - }); - }); - - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const details = $('.torrent-detail-page'); - const magnetLink = details.find('a:contains(\'Magnet Download\')').attr('href'); - const imdbIdMatch = details.find('div[id=\'description\']').html().match(/imdb\.com\/title\/(tt\d+)/i); - - const torrent = { - name: escapeHTML(decode(magnetLink).name.replace(/\+/g, ' ')), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - seeders: parseInt(details.find('strong:contains(\'Seeders\')').next().text(), 10), - leechers: parseInt(details.find('strong:contains(\'Leechers\')').next().text(), 10), - category: details.find('strong:contains(\'Category\')').next().text(), - languages: details.find('strong:contains(\'Language\')').next().text(), - size: parseSize(details.find('strong:contains(\'Total size\')').next().text()), - uploadDate: parseDate(details.find('strong:contains(\'Date uploaded\')').next().text()), - imdbId: imdbIdMatch && imdbIdMatch[1], - files: details.find('div[id=\'files\']').first().find('li') - .map((i, elem) => $(elem).text()) - .map((i, text) => ({ - fileIndex: i, - name: text.match(/^(.+)\s\(.+\)$/)[1].replace(/^.+\//g, ''), - path: text.match(/^(.+)\s\(.+\)$/)[1], - size: parseSize(text.match(/^.+\s\((.+)\)$/)[1]) - })).get() - }; - resolve(torrent); - }); -} - -function parseDate(dateString) { - if (/decade.*ago/i.test(dateString)) { - return Sugar.Date.create('10 years ago'); - } - return Sugar.Date.create(dateString); -} - -module.exports = { torrent, search, browse, Categories, FlaresolverrCookies, FlaresolverrUserAgent }; diff --git a/scraper/scrapers/1337x/1337x_scraper.js b/scraper/scrapers/1337x/1337x_scraper.js deleted file mode 100644 index 7e1a1de..0000000 --- a/scraper/scrapers/1337x/1337x_scraper.js +++ /dev/null @@ -1,115 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const leetx = require('./1337x_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = '1337x'; -const UNTIL_PAGE = 10; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)) - .then(() => { - leetx.FlaresolverrCookies = ''; - leetx.FlaresolverrUserAgent = ''; - }); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => leetx.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - leetx.Categories.MOVIE, - leetx.Categories.TV, - leetx.Categories.ANIME, - leetx.Categories.DOCUMENTARIES - ]; - - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return leetx.browse(({ category, page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); - -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent({ provider: NAME, ...record })) { - return record; - } - - const torrentFound = await leetx.torrent(record.torrentId).catch(() => undefined); - - if (!torrentFound || !TYPE_MAPPING[torrentFound.category]) { - return Promise.resolve('Invalid torrent record'); - } - if (isNaN(torrentFound.uploadDate)) { - console.warn(`Incorrect upload date for [${torrentFound.infoHash}] ${torrentFound.name}`); - return; - } - if (await checkAndUpdateTorrent(torrentFound)) { - return torrentFound; - } - - const torrent = { - infoHash: torrentFound.infoHash, - provider: NAME, - torrentId: torrentFound.torrentId, - title: torrentFound.name.replace(/\t|\s+/g, ' ').trim(), - type: TYPE_MAPPING[torrentFound.category], - size: torrentFound.size, - seeders: torrentFound.seeders, - uploadDate: torrentFound.uploadDate, - imdbId: torrentFound.imdbId, - languages: torrentFound.languages || undefined - }; - - return createTorrentEntry(torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[leetx.Categories.MOVIE] = Type.MOVIE; - mapping[leetx.Categories.DOCUMENTARIES] = Type.MOVIE; - mapping[leetx.Categories.TV] = Type.SERIES; - mapping[leetx.Categories.ANIME] = Type.ANIME; - return mapping; -} - -function untilPage(category) { - if (leetx.Categories.ANIME === category) { - return 5; - } - if (leetx.Categories.DOCUMENTARIES === category) { - return 1; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/animestorrent/animestorrent_api.js b/scraper/scrapers/animestorrent/animestorrent_api.js deleted file mode 100644 index b1004f6..0000000 --- a/scraper/scrapers/animestorrent/animestorrent_api.js +++ /dev/null @@ -1,128 +0,0 @@ -const axios = require('axios'); -const cheerio = require("cheerio"); -const decode = require("magnet-uri"); -const { getRandomUserAgent } = require("../../lib/requestHelper"); - -const defaultTimeout = 10000; -const maxSearchPage = 50; - -const baseUrl = 'https://animestorrent.com'; - -const Categories = { - MOVIE: 'filme', - ANIME: 'tv', - OVA: 'ova' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const slug = torrentId.split("/")[3]; - return singleRequest(`${baseUrl}/${slug}`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map((el) => ({ torrentId: slug, ...el }))) - .catch((err) => torrent(slug, config, retries - 1)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, config.extendToPage || 1); - - return singleRequest(`${baseUrl}/page/${page}/?s=${keyword}`, config) - .then((body) => parseTableBody(body)) - .then((torrents) => - torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }) - .catch(() => []) - .then((nextTorrents) => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const requestUrl = category ? `${baseUrl}/tipo/${category}/page/${page}/` : `${baseUrl}/page/${page}/`; - - return singleRequest(requestUrl, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options).then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if ( - body.includes("502: Bad gateway") || - body.includes("403 Forbidden") - ) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - - const torrents = []; - - $("article.bs").each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find("span.ntitle").text(), - torrentId: row.find("div > a").attr("href"), - }); - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise(async (resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - let magnets = []; - $(`a[href^="magnet"]`).each((i, section) => { - const magnet = $(section).attr("href"); - magnets.push(magnet); - }); - const details = $('div.infox') - const torrents = magnets.map((magnetLink) => { - return { - title: decode(magnetLink).name, - originalName: details.find('h1.entry-title').text(), - year: details.find('b:contains(\'Lançamento:\')')[0] - ? details.find('b:contains(\'Lançamento:\')')[0].nextSibling.nodeValue.trim() - : '', - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - category: details.find('b:contains(\'Tipo:\')').next().attr('href').split('/')[4], - uploadDate: new Date($("time[itemprop=dateModified]").attr("datetime")), - }; - }) - resolve(torrents); - }); -} - -module.exports = { torrent, search, browse, Categories }; \ No newline at end of file diff --git a/scraper/scrapers/animestorrent/animestorrent_scraper.js b/scraper/scrapers/animestorrent/animestorrent_scraper.js deleted file mode 100644 index b6de04d..0000000 --- a/scraper/scrapers/animestorrent/animestorrent_scraper.js +++ /dev/null @@ -1,108 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const animetorrrent = require("./animestorrent_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); -const { getKitsuId } = require("../../lib/metadata"); - -const NAME = "AnimesTorrent"; -const UNTIL_PAGE = 5; - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => animetorrrent.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - animetorrrent.Categories.MOVIE, - animetorrrent.Categories.ANIME, - animetorrrent.Categories.OVA - ]; - - return Promises.sequence(allowedCategories - .map((category) => () => scrapeLatestTorrentsForCategory(category))) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return animetorrrent - .browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - return animetorrrent.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - if (!foundTorrent.imdbId && !foundTorrent.kitsuId) { - const info = { title: foundTorrent.originalName, year: foundTorrent.year }; - foundTorrent.kitsuId = await getKitsuId(info).catch(() => undefined); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: Type.ANIME, - imdbId: foundTorrent.imdbId, - kitsuId: foundTorrent.kitsuId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function untilPage(category) { - if (animetorrrent.Categories.ANIME === category) { - return 5; - } - if (animetorrrent.Categories.OVA === category) { - return 3; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/comando/comando_api.js b/scraper/scrapers/comando/comando_api.js deleted file mode 100644 index 640e9b9..0000000 --- a/scraper/scrapers/comando/comando_api.js +++ /dev/null @@ -1,163 +0,0 @@ -const axios = require('axios'); -const moment = require("moment") -const cheerio = require("cheerio"); -const decode = require('magnet-uri'); -const { escapeHTML } = require('../../lib/metadata'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { isPtDubbed, sanitizePtName, sanitizePtLanguages, sanitizePtOriginalName } = require('../scraperHelper') - -const defaultTimeout = 30000; -const maxSearchPage = 50 - -const baseUrl = 'https://comando.to'; - -const Categories = { - MOVIE: 'filmes', - TV: 'series', - ANIME: 'animes', - DOCUMENTARIES: 'documentario' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const slug = torrentId.split("/")[3]; - return singleRequest(`${baseUrl}/${slug}`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map(el => ({ torrentId: slug, ...el }))) - .catch((err) => { - console.warn(`Failed Comando ${slug} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, (config.extendToPage || 1)) - - return singleRequest(`${baseUrl}/page/${page}/?s=${keyword}`, config) - .then(body => parseTableBody(body)) - .then(torrents => torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - - return singleRequest(`${baseUrl}/category/${category}/page/${page}/`, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('article').each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find("h2 > a").text(), - torrentId: row.find("h2 > a").attr("href") - }); - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const magnets = $('h2 > strong') - .filter((i, elem) => isPtDubbed($(elem).text())).parent() - .map((i, elem) => $(elem).nextUntil('h2, hr')) - .map((i, elem) => $(elem).find('a[href^="magnet"]')) - .map((i, section) => $(section).attr("href")).get(); - const details = $('strong, b').filter((i, elem) => $(elem).text().match(/Servidor|Orig(?:\.|inal)/)).parent(); - const imdbIdMatch = details.find('a[href*="imdb.com"]').attr('href') - const torrents = magnets.map(magnetLink => { - const decodedMagnet = decode(magnetLink); - const originalNameElem = details.find('strong, b') - .filter((i, elem) => $(elem).text().match(/Baixar|Orig(?:\.|inal)|^Título:/)); - const languagesElem = details.find('strong, b') - .filter((i, elem) => $(elem).text().match(/^\s*([IÍ]dioma|[AÁ]udio)/)); - const originalName = parseOriginalName(originalNameElem); - const title = decodedMagnet.name && escapeHTML(decodedMagnet.name.replace(/\+/g, ' ')); - return { - title: title ? sanitizePtName(title) : originalName, - originalName: sanitizePtOriginalName(originalName), - year: details.find('a[href*="comando.to/category/"]').text(), - infoHash: decodedMagnet.infoHash, - magnetLink: magnetLink, - category: parseCategory($('div.entry-categories').html()), - uploadDate: new Date(moment($('a.updated').text(), 'LL', 'pt-br').format()), - imdbId: imdbIdMatch ? imdbIdMatch.split('/')[4] : null, - languages: sanitizePtLanguages(languagesElem[0].nextSibling.nodeValue) - } - }); - resolve(torrents.filter((x) => x)); - }); -} - -function parseOriginalName(originalNameElem) { - if (!originalNameElem[0]) { - return ''; - } - const originalName = originalNameElem.next().text() - || originalNameElem[0].nextSibling.nodeValue - || originalNameElem.text(); - return originalName.replace(/[^:]*: ?/, '').trim(); -} - -function parseCategory(categorys) { - const $ = cheerio.load(categorys) - if ($('a:contains(\'animes\')').text()) { - return Categories.ANIME - } - if ($('a:contains(\'Filmes\')').text()) { - return Categories.MOVIE - } - if ($('a:contains(\'Series\')').text()) { - return Categories.TV - } -} - -module.exports = { torrent, search, browse, Categories }; \ No newline at end of file diff --git a/scraper/scrapers/comando/comando_scraper.js b/scraper/scrapers/comando/comando_scraper.js deleted file mode 100644 index 6062871..0000000 --- a/scraper/scrapers/comando/comando_scraper.js +++ /dev/null @@ -1,112 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const comando = require("./comando_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { getImdbId } = require("../../lib/metadata"); - -const NAME = "Comando"; -const UNTIL_PAGE = 5; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => comando.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - comando.Categories.MOVIE, - comando.Categories.TV - ]; - - return Promises.sequence(allowedCategories - .map((category) => () => scrapeLatestTorrentsForCategory(category))) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return comando.browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - return comando.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - if (!foundTorrent.imdbId && foundTorrent.originalName) { - const info = { title: foundTorrent.originalName, year: foundTorrent.year }; - foundTorrent.imdbId = await getImdbId(info, TYPE_MAPPING[foundTorrent.category]).catch(() => undefined); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - imdbId: foundTorrent.imdbId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[comando.Categories.MOVIE] = Type.MOVIE; - mapping[comando.Categories.DOCUMENTARIES] = Type.SERIES; - mapping[comando.Categories.TV] = Type.SERIES; - mapping[comando.Categories.ANIME] = Type.ANIME; - return mapping; -} - -function untilPage(category) { - if (comando.Categories.TV === category) { - return 5; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/comoeubaixo/comoeubaixo_api.js b/scraper/scrapers/comoeubaixo/comoeubaixo_api.js deleted file mode 100644 index 80ada38..0000000 --- a/scraper/scrapers/comoeubaixo/comoeubaixo_api.js +++ /dev/null @@ -1,135 +0,0 @@ -const axios = require('axios'); -const cheerio = require("cheerio"); -const decode = require('magnet-uri'); -const { escapeHTML } = require('../../lib/metadata'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { isPtDubbed, sanitizePtName, sanitizePtLanguages } = require('../scraperHelper') - -const defaultTimeout = 30000; -const maxSearchPage = 50 - -const baseUrl = 'https://comoeubaixo.com'; - -const Categories = { - MOVIE: 'filmes', - TV: 'series', - ANIME: 'anime', - DESENHOS: 'desenhos' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const slug = encodeURIComponent(torrentId.split("/")[3]); - return singleRequest(`${baseUrl}/${slug}/`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map(el => ({ torrentId: slug, ...el }))) - .catch((err) => { - console.warn(`Failed ComoEuBaixo ${torrentId} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, (config.extendToPage || 1)) - - return singleRequest(`${baseUrl}/${keyword}/${page}/`, config) - .then(body => parseTableBody(body)) - .then(torrents => torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const requestUrl = category ? `${baseUrl}/${category}/${page}/` : `${baseUrl}/${page}/`; - - return singleRequest(requestUrl, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body || (Buffer.isBuffer(body) && !body.size)) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('div.capa_larga.align-middle').each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find("a").text(), - torrentId: row.find("a").attr("href"), - isTorrent: !!row.find("p:contains(\'Torrent\')")[0] - }); - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const magnets = $(`a[href^="magnet"]`) - .filter((i, elem) => isPtDubbed($(elem).attr('title'))) - .map((i, elem) => $(elem).attr("href")).get(); - const details = $('div#informacoes') - const category = details.find('strong:contains(\'Gêneros: \')').next().attr('href').split('/')[0] - const torrents = magnets.map(magnetLink => { - const decodedMagnet = decode(magnetLink); - const name = sanitizePtName(escapeHTML(decodedMagnet.name || '').replace(/\+/g, ' ')); - const originalTitle = details.find('strong:contains(\'Baixar\')')[0].nextSibling.nodeValue.split('-')[0]; - const year = details.find('strong:contains(\'Data de Lançamento: \')').next().text().trim(); - const fallBackTitle = `${originalTitle.trim()} ${year.trim()} ${name.trim()}`; - return { - title: name.length > 5 ? name : fallBackTitle, - infoHash: decodedMagnet.infoHash, - magnetLink: magnetLink, - category: category, - uploadDate: new Date($('time').attr('datetime')), - imdbId: details.find('a[href*="imdb.com"]').attr('href').split('/')[4], - languages: sanitizePtLanguages(details.find('strong:contains(\'Idioma\')')[0].nextSibling.nodeValue) - }; - }) - resolve(torrents.filter((x) => x)); - }); -} - -module.exports = { torrent, search, browse, Categories }; \ No newline at end of file diff --git a/scraper/scrapers/comoeubaixo/comoeubaixo_scraper.js b/scraper/scrapers/comoeubaixo/comoeubaixo_scraper.js deleted file mode 100644 index f01799b..0000000 --- a/scraper/scrapers/comoeubaixo/comoeubaixo_scraper.js +++ /dev/null @@ -1,115 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const comoeubaixo = require("./comoeubaixo_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); - -const NAME = "ComoEuBaixo"; -const UNTIL_PAGE = 5; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => comoeubaixo.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - comoeubaixo.Categories.MOVIE, - comoeubaixo.Categories.TV, - comoeubaixo.Categories.DESENHOS - ]; - - return Promises.sequence(allowedCategories - .map((category) => () => scrapeLatestTorrentsForCategory(category))) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return comoeubaixo - .browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - if (!entry.isTorrent) { - return entry; - } - return comoeubaixo.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - imdbId: foundTorrent.imdbId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[comoeubaixo.Categories.MOVIE] = Type.MOVIE; - mapping[comoeubaixo.Categories.TV] = Type.SERIES; - mapping[comoeubaixo.Categories.ANIME] = Type.ANIME; - mapping[comoeubaixo.Categories.DESENHOS] = Type.SERIES; - return mapping; -} - -function untilPage(category) { - if (comoeubaixo.Categories.DESENHOS === category) { - return UNTIL_PAGE; - } - if (comoeubaixo.Categories.TV === category) { - return UNTIL_PAGE; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/darkmahou/darkmahou_api.js b/scraper/scrapers/darkmahou/darkmahou_api.js deleted file mode 100644 index b9324ca..0000000 --- a/scraper/scrapers/darkmahou/darkmahou_api.js +++ /dev/null @@ -1,127 +0,0 @@ -const axios = require('axios'); -const cheerio = require("cheerio"); -const decode = require("magnet-uri"); -const { getRandomUserAgent } = require("../../lib/requestHelper"); - -const defaultTimeout = 10000; -const maxSearchPage = 50; - -const baseUrl = 'https://darkmahou.com'; - -const Categories = { - MOVIE: 'movie', - ANIME: 'tv', - OVA: 'ova' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const slug = torrentId.split("/")[3]; - return singleRequest(`${baseUrl}/${slug}`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map((el) => ({ torrentId: slug, ...el }))) - .catch((err) => torrent(slug, config, retries - 1)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, config.extendToPage || 1); - - return singleRequest(`${baseUrl}/page/${page}/?s=${keyword}`, config) - .then((body) => parseTableBody(body)) - .then((torrents) => - torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }) - .catch(() => []) - .then((nextTorrents) => torrents.concat(nextTorrents)) - : torrents - ) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const requestUrl = category ? `${baseUrl}/category/${category}/page/${page}/` : `${baseUrl}/page/${page}/`; - - return singleRequest(requestUrl, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options).then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if ( - body.includes("502: Bad gateway") || - body.includes("403 Forbidden") - ) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - - const torrents = []; - - $("article.bs").each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find("span.ntitle").text(), - torrentId: row.find("div > a").attr("href"), - }); - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise(async (resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - let magnets = []; - $(`a[href^="magnet"]`).each((i, section) => { - const magnet = $(section).attr("href"); - magnets.push(magnet); - }); - const details = $('div.infox') - const torrent = magnets.map((magnetLink) => { - return { - title: decode(magnetLink).name, - originalName: details.find('h1.entry-title').text(), - year: details.find('b:contains(\'Lançado:\')')[0].nextSibling.nodeValue || '', - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - category: details.find('b:contains(\'Tipo:\')').next().attr('href').split('/')[4], - uploadDate: new Date($("time[itemprop=dateModified]").attr("datetime")), - }; - }) - resolve(torrent.filter((x) => x)); - }); -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/darkmahou/darkmahou_scraper.js b/scraper/scrapers/darkmahou/darkmahou_scraper.js deleted file mode 100644 index 2168b0e..0000000 --- a/scraper/scrapers/darkmahou/darkmahou_scraper.js +++ /dev/null @@ -1,108 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const darkmahou = require("./darkmahou_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); -const { getKitsuId } = require("../../lib/metadata"); - -const NAME = "DarkMahou"; -const UNTIL_PAGE = 5; - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => darkmahou.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - darkmahou.Categories.MOVIE, - darkmahou.Categories.ANIME, - darkmahou.Categories.OVA - ]; - - return Promises.sequence(allowedCategories - .map((category) => () => scrapeLatestTorrentsForCategory(category))) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return darkmahou - .browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - return darkmahou.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - if (!foundTorrent.imdbId && !foundTorrent.kitsuId) { - const info = { title: foundTorrent.originalName, year: foundTorrent.year }; - foundTorrent.kitsuId = await getKitsuId(info).catch(() => undefined); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: Type.ANIME, - imdbId: foundTorrent.imdbId, - kitsuId: foundTorrent.kitsuId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function untilPage(category) { - if (darkmahou.Categories.ANIME === category) { - return 5; - } - if (darkmahou.Categories.OVA === category) { - return 4; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/erairaws/erairaws_api.js b/scraper/scrapers/erairaws/erairaws_api.js deleted file mode 100644 index 17599b0..0000000 --- a/scraper/scrapers/erairaws/erairaws_api.js +++ /dev/null @@ -1,93 +0,0 @@ -const axios = require('axios'); -const cheerio = require("cheerio"); -const decode = require("magnet-uri"); -const Promises = require("../../lib/promises"); -const { getRandomUserAgent } = require("../../lib/requestHelper"); - -const defaultTimeout = 10000; - -const baseUrl = 'https://www.erai-raws.info'; - -const Categories = { - ANIMES: 'anime', - EPISODES: 'episodes' -}; - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - - return singleRequest(`${baseUrl}/${category}/page/${page}/`, config) - .then((body) => parseTableBody(body) - .then(animes => Promises.sequence(animes.map(anime => () => singleRequest(anime.animeLink)))) - .then(animeBodies => Promise.all(animeBodies.map(animeBody => parseTorrentPage(animeBody)))) - .then(animeInfos => animeInfos.reduce((a, b) => a.concat(b), []))) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout, }; - - return axios.get(requestUrl, options).then((response) => { - const body = response.data; - if (!body || (Buffer.isBuffer(body) && !body.size)) { - throw new Error(`No body: ${requestUrl}`); - } else if ( - body.includes("502: Bad gateway") || - body.includes("403 Forbidden") - ) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - - const links = $('[itemprop=\'headline\'] a, .content-area a.aa_ss_ops_new') - .map((i, element) => ({ - name: $(element).text(), - animeLink: $(element).attr("href"), - })).get(); - resolve(links); - }); -} - -function parseTorrentPage(body) { - return new Promise(async (resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error("Failed loading body")); - } - const entries = $('.tab-content table, .content-area table') - .map((i, entry) => { - const languages = $(entry).find('.tooltip3').map((_, l) => $(l).attr('data-title')).get().join('/'); - const magnets = $(entry).find('a[href^="magnet"]').map((_, m) => $(m).attr('href')).get(); - return { languages, magnets } - }).get(); - const torrents = entries - .map(entry => entry.magnets - .map(magnet => decode(magnet)) - .map(decodedMagnet => ({ - title: decodedMagnet.name, - infoHash: decodedMagnet.infoHash, - trackers: decodedMagnet.tr, - languages: entry.languages - }))) - .reduce((a, b) => a.concat(b), []); - resolve(torrents); - }); -} - -module.exports = { browse, Categories }; diff --git a/scraper/scrapers/erairaws/erairaws_rss_api.js b/scraper/scrapers/erairaws/erairaws_rss_api.js deleted file mode 100644 index 98c5745..0000000 --- a/scraper/scrapers/erairaws/erairaws_rss_api.js +++ /dev/null @@ -1,50 +0,0 @@ -const Parser = require('rss-parser'); -const decode = require("magnet-uri"); - -const parser = new Parser({ - customFields: { - item: [['erai:subtitles', 'subtitles']] - } -}); -const baseUrl = 'https://www.erai-raws.info'; -const rssKey = process.env.ERAI_RSS_KEY; - -const Categories = { - ANIMES: 'anime', - EPISODES: 'episodes' -}; - -function browse() { - return parser.parseURL(`${baseUrl}/feed/?type=magnet&${rssKey}`) - .then(result => result.items - .map(item => { - const decodedMagnet = decode(item.link); - const languages = parseLanguages(item.subtitles); - return { - title: decodedMagnet.name, - infoHash: decodedMagnet.infoHash, - trackers: decodedMagnet.tr, - languages: languages - } - })); -} - -const languageMapping = { - 'us': 'English', - 'br': 'Portuguese(Brazil)', - 'mx': 'Spanish(Latin_America)', - 'es': 'Spanish', - 'sa': 'Arabic', - 'fr': 'French', - 'de': 'German', - 'it': 'Italian', - 'ru': 'Russian' -} -function parseLanguages(languages) { - return languages.split('][') - .map(lang => lang.replace(/[\[\]]/g, '')) - .map(lang => languageMapping[lang] || lang) - .join('/'); -} - -module.exports = { browse, Categories }; diff --git a/scraper/scrapers/erairaws/erairaws_scraper.js b/scraper/scrapers/erairaws/erairaws_scraper.js deleted file mode 100644 index 20c454a..0000000 --- a/scraper/scrapers/erairaws/erairaws_scraper.js +++ /dev/null @@ -1,47 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const erairaws = require('./erairaws_rss_api'); -const { checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'EraiRaws'; - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function scrapeLatestTorrents() { - return scrapeLatestTorrentsForCategory(erairaws.Categories.EPISODES) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return erairaws.browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processRecord(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve([])); -} - -async function processRecord(foundTorrent) { - return checkAndUpdateTorrent({ provider: NAME, ...foundTorrent }).then(() => foundTorrent); -} - -function untilPage(category) { - if (category === erairaws.Categories.ANIMES) { - return 45; - } - return 1; -} - -module.exports = { scrape, NAME }; diff --git a/scraper/scrapers/eztv/eztv_api.js b/scraper/scrapers/eztv/eztv_api.js deleted file mode 100644 index 0e8ec2c..0000000 --- a/scraper/scrapers/eztv/eztv_api.js +++ /dev/null @@ -1,117 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const { decode } = require("magnet-uri"); -const Promises = require('../../lib/promises'); -const { getRandomUserAgent } = require('./../../lib/requestHelper'); -const { parseSize } = require("../scraperHelper"); - -const defaultProxies = [ - 'https://eztv.re' -]; -const defaultTimeout = 120000; -const minDelay = 3000; -const jitterDelay = minDelay; -const limit = 100; -const maxPage = 5; - -function torrent(torrentId, config = {}, retries = 1) { - if (!torrentId) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/ep/${torrentId}`, config))) - .then(body => parseTorrentPage(body)) - .then(torrent => ({ torrentId, ...torrent })) - .catch(error => retries ? jitter().then(() => torrent(torrentId, config, retries - 1)) : Promise.reject(error)); -} - -function search(imdbId, config = {}, retries = 1) { - if (!imdbId) { - return Promise.reject(new Error(`Failed ${imdbId} search`)); - } - const id = imdbId.replace('tt', ''); - const page = config.page || 1; - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/get-torrents?limit=${limit}&page=${page}&imdb_id=${id}`, config))) - .then(results => parseResults(results)) - .then(torrents => torrents.length === limit && page < maxPage - ? search(imdbId, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch(error => retries ? jitter().then(() => search(imdbId, config, retries - 1)) : Promise.reject(error)); -} - -function browse(config = {}, retries = 1) { - const page = config.page || 1; - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/get-torrents?limit=${limit}&page=${page}`, config))) - .then(results => parseResults(results)) - .catch(error => retries ? jitter().then(() => browse(config, retries - 1)) : Promise.reject(error)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options) - .then(response => { - if (!response.data) { - return Promise.reject(`No body: ${requestUrl}`); - } - return Promise.resolve(response.data); - }); -} - -function parseResults(results) { - if (!results || !Array.isArray(results.torrents)) { - return Promise.reject(`Incorrect results ${results}`) - } - return results.torrents.map(torrent => parseTorrent(torrent)); -} - -function parseTorrent(torrent) { - return { - name: torrent.title.replace(/EZTV$/, ''), - torrentId: torrent.episode_url.replace(/.*\/ep\//, ''), - infoHash: torrent.hash.trim().toLowerCase(), - magnetLink: torrent.magnet_url, - torrentLink: torrent.torrent_url, - seeders: torrent.seeds, - size: torrent.size_bytes, - uploadDate: new Date(torrent.date_released_unix * 1000), - imdbId: torrent.imdb_id !== '0' && 'tt' + torrent.imdb_id || undefined - } -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const content = $('table[class="forum_header_border_normal"]'); - const magnetLink = content.find('a[title="Magnet Link"]').attr('href'); - const torrent = { - name: content.find('h1 > span').text().replace(/EZTV$/, ''), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - torrentLink: content.find('a[title="Download Torrent"]').attr('href'), - seeders: parseInt(content.find('span[class="stat_red"]').first().text(), 10) || 0, - size: parseSize(content.find('b:contains(\'Filesize:\')')[0].nextSibling.data), - uploadDate: moment(content.find('b:contains(\'Released:\')')[0].nextSibling.data, 'Do MMM YYYY').toDate(), - showUrl: content.find('.episode_left_column a').attr('href') - }; - resolve(torrent); - }); -} - -function jitter() { - return Promises.delay(minDelay + Math.round(Math.random() * jitterDelay)) -} - -module.exports = { torrent, search, browse }; diff --git a/scraper/scrapers/eztv/eztv_scraper.js b/scraper/scrapers/eztv/eztv_scraper.js deleted file mode 100644 index ff0e656..0000000 --- a/scraper/scrapers/eztv/eztv_scraper.js +++ /dev/null @@ -1,85 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const { parse } = require('parse-torrent-title'); -const eztv = require('./eztv_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); -const { isEpisodeImdbId } = require('../../lib/metadata'); - -const NAME = 'EZTV'; -const UNTIL_PAGE = 10; - -const entryLimiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent, getImdbIdsMethod) { - // return getImdbIdsMethod() - // .then(imdbIds => Promise.all(imdbIds.map(imdbId => limiter.schedule(() => eztv.search(imdbId))))) - // .then(results => results.reduce((a, b) => a.concat(b), [])) - // .catch(() => limiter.schedule(() => eztv.torrent(torrent.torrentId))); - return Promise.resolve([]); -} - -async function scrapeLatestTorrents() { - return scrapeLatestTorrentsForCategory(); -} - -async function scrapeLatestTorrentsForCategory(page = 1) { - console.log(`Scrapping ${NAME} page ${page}`); - return eztv.browse(({ page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] due: `, error); - // return Promises.delay(30000).then(() => scrapeLatestTorrentsForCategory(page)) - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(t => entryLimiter.schedule(() => processTorrentRecord(t))))) - .then(resolved => resolved.length > 0 && page < UNTIL_PAGE - ? scrapeLatestTorrentsForCategory(page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - if (!record || !record.size) { - return Promise.resolve('Invalid torrent record'); - } - - // imdb id for talk shows is usually incorrect on eztv - const parsedTitle = parse(record.name); - const dateEpisode = !parsedTitle.season && parsedTitle.date; - if (dateEpisode && await isEpisodeImdbId(record.imdbId)) { - delete record.imdbId; - } - - const torrent = { - infoHash: record.infoHash, - provider: NAME, - torrentId: record.torrentId, - title: record.name.replace(/\t|\s+/g, ' ').trim(), - type: Type.SERIES, - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - imdbId: record.imdbId, - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/horriblesubs/horriblesubs_api.js b/scraper/scrapers/horriblesubs/horriblesubs_api.js deleted file mode 100644 index 5ba306a..0000000 --- a/scraper/scrapers/horriblesubs/horriblesubs_api.js +++ /dev/null @@ -1,137 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const Promises = require('../../lib/promises'); - -const defaultUrl = 'https://horriblesubs.info'; -const defaultTimeout = 10000; - -function allShows(config = {}) { - return _getContent('/shows/', config) - .then(($) => $('div[class="ind-show"]') - .map((index, element) => $(element).children('a')) - .map((index, element) => ({ - title: element.attr('title'), - url: `${config.proxyUrl || defaultUrl}${element.attr('href')}` - })).get()); -} - -async function showData(showInfo, config = {}) { - const showEndpoint = (showInfo.url || showInfo).match(/\/show.+/)[0]; - const title = showInfo.title; - const showId = await _getShowId(showEndpoint); - const packEntries = await _getShowEntries(showId, title, 'batch', config); - const singleEntries = await _getShowEntries(showId, title, 'show', config); - - return { - title: title, - url: showInfo.url || showInfo, - showId: showId, - singleEpisodes: singleEntries, - packEpisodes: packEntries - }; -} - -async function getLatestEntries(config = {}) { - return _getAllLatestEntries(config) - .then((entries) => Promises.sequence(entries.map((entry) => () => _findLatestEntry(entry, config)))) - .then((entries) => entries.filter((entry) => entry)) -} - -function _getContent(endpoint, config = {},) { - const baseUrl = config.proxyUrl || defaultUrl; - const timeout = config.timeout || defaultTimeout; - const url = endpoint.startsWith('http') - ? endpoint.replace(/https?:\/\/[^/]+/, baseUrl) - : `${baseUrl}${endpoint}`; - - return axios.get(url, { timeout: timeout }) - .then((response) => response.data) - .then((body) => cheerio.load(body)); -} - -function _getShowId(showEndpoint) { - return _getContent(showEndpoint.replace(/(?:#\d+)?\/?$/, '/')) - .then($ => $('div.entry-content').find('script').html().match(/var hs_showid = (\d+)/)[1]); -} - -function _getShowEntries(animeId, animeTitle, type, config) { - return _getAllEntries(animeId, type, config) - .then((entries) => entries.filter((entry) => entry.title === animeTitle)); -} - -function _getAllEntries(animeId, type, config, page = 0, autoExtend = true) { - const entriesEndpoint = `/api.php?method=getshows&type=${type}&showid=${animeId}&nextid=${page}`; - return _getEntries(entriesEndpoint, config) - .then((entries) => !autoExtend || !entries.length ? entries : - _getAllEntries(animeId, type, config, page + 1) - .then((nextEntries) => entries.concat(nextEntries))); -} - -function _getEntries(endpoint, config) { - return _getContent(endpoint, config) - .then(($) => $('div[class="rls-info-container"]') - .map((index, element) => ({ - title: $(element).find('a[class="rls-label"]').contents() - .filter((i, el) => el.nodeType === 3).first().text().trim(), - episode: $(element).find('a[class="rls-label"]').find('strong').text(), - uploadDate: _parseDate($(element).find('a[class="rls-label"]').find('span[class="rls-date"]').text()), - mirrors: $(element).find('div[class="rls-links-container"]').children() - .map((indexLink, elementLink) => ({ - resolution: $(elementLink).attr('id').match(/\d+p$/)[0], - magnetLink: $(elementLink).find('a[title="Magnet Link"]').attr('href'), - torrentLink: $(elementLink).find('a[title="Torrent Link"]').attr('href') - })).get() - })).get()); -} - -function _getAllLatestEntries(config, page = 0) { - const pageParam = page === 0 ? '' : `&nextid=${page}`; - const entriesEndpoint = `/api.php?method=getlatest${pageParam}`; - return _getContent(entriesEndpoint, config) - .then(($) => $('li a') - .map((index, element) => ({ - urlEndpoint: $(element).attr('href'), - episode: $(element).find('strong').text() - })).get()) - .then((entries) => entries.length < 12 - ? entries - : _getAllLatestEntries(config, page + 1) - .then((nextEntries) => entries.concat(nextEntries))); -} - -async function _findLatestEntry(entry, config) { - const showId = await _getShowId(entry.urlEndpoint); - let foundEntry; - let page = 0; - let reachedEnd = false; - - while (!foundEntry && !reachedEnd) { - const allEntries = await _getAllEntries(showId, 'show', config, page, false); - foundEntry = allEntries.filter((e) => e.episode === entry.episode)[0]; - page = page + 1; - reachedEnd = allEntries.length === 0; - } - - if (!foundEntry) { - return; - } - return { - title: foundEntry.title, - url: entry.urlEndpoint, - showId: showId, - singleEpisodes: [foundEntry] - }; -} - -function _parseDate(date) { - if (date.match(/today/i)) { - return moment().toDate(); - } else if (date.match(/yesterday/i)) { - return moment().subtract(1, 'day').toDate(); - } - return moment(date, 'MM/DD/YYYY').toDate(); -} - -module.exports = { allShows, showData, getLatestEntries, _getShowId }; - diff --git a/scraper/scrapers/horriblesubs/horriblesubs_mapping.json b/scraper/scrapers/horriblesubs/horriblesubs_mapping.json deleted file mode 100644 index 1b94e30..0000000 --- a/scraper/scrapers/horriblesubs/horriblesubs_mapping.json +++ /dev/null @@ -1,5636 +0,0 @@ -{ - "Absolute Duo": { - "showId": "1", - "kitsu_id": "8641" - }, - "Ace of Diamond": { - "showId": "2", - "kitsu_id": "7699" - }, - "Ace of Diamond S2": { - "showId": "3", - "kitsu_id": "10741" - }, - "Ai-Mai-Mi": { - "showId": "4", - "kitsu_id": "7382" - }, - "Ai-Mai-Mi - Mousou Catastrophie": { - "showId": "5", - "kitsu_id": "8498" - }, - "AIURA": { - "showId": "6", - "kitsu_id": "7576" - }, - "Akagami no Shirayukihime": { - "showId": "7", - "kitsu_id": "10621" - }, - "Akame ga Kill!": { - "showId": "8", - "kitsu_id": "8270" - }, - "Akatsuki no Yona": { - "showId": "9", - "kitsu_id": "8648" - }, - "AKB0048": { - "showId": "10", - "kitsu_id": "6678" - }, - "Aku no Hana": { - "showId": "11", - "kitsu_id": "7387" - }, - "Akuma no Riddle": { - "showId": "12", - "kitsu_id": "7844" - }, - "Aldnoah Zero": { - "showId": "13", - "kitsu_id": "8297" - }, - "Ame-iro Cocoa": { - "showId": "14", - "kitsu_id": "10095" - }, - "Amnesia": { - "showId": "15", - "kitsu_id": "7209" - }, - "Anime de Wakaru Shinryounaika": { - "showId": "16", - "kitsu_id": "9786" - }, - "Ano Natsu de Matteru": { - "showId": "17", - "kitsu_id": "6508" - }, - "Anohana (Live Action)": { - "showId": "18" - }, - "Another": { - "showId": "19", - "kitsu_id": "6462" - }, - "Ao Haru Ride": { - "showId": "20", - "kitsu_id": "8246" - }, - "Aoharu x Kikanjuu": { - "showId": "21", - "kitsu_id": "10716" - }, - "Aoi Sekai no Chuushin de": { - "showId": "22", - "kitsu_id": "7220" - }, - "Aquarion Logos": { - "showId": "23", - "kitsu_id": "10764" - }, - "Arata Kangatari": { - "showId": "24", - "kitsu_id": "7448" - }, - "Argevollen": { - "showId": "25", - "kitsu_id": "8401" - }, - "Arpeggio of Blue Steel - Ars Nova": { - "showId": "26", - "kitsu_id": "7769" - }, - "Arslan Senki": { - "showId": "27", - "kitsu_id": "9972" - }, - "Arslan Senki S2": { - "showId": "27", - "kitsu_id": "11477" - }, - "Ashita no Joe 2": { - "showId": "28", - "kitsu_id": "2646" - }, - "Assassination Classroom": { - "showId": "29", - "kitsu_id": "8640" - }, - "Baby Steps": { - "showId": "30", - "kitsu_id": "8093" - }, - "Baby Steps 2": { - "showId": "31", - "kitsu_id": "9142" - }, - "BAKUMATSU GIJINDEN ROMAN": { - "showId": "32", - "kitsu_id": "7388" - }, - "Bakumatsu Rock": { - "showId": "33", - "kitsu_id": "8533" - }, - "Barakamon": { - "showId": "34", - "kitsu_id": "8026" - }, - "Battle Girls - Time Paradox": { - "showId": "35", - "kitsu_id": "6123" - }, - "Beelzebub": { - "showId": "36", - "kitsu_id": "5766" - }, - "Bikini Warriors": { - "showId": "37", - "kitsu_id": "10920" - }, - "Binan Koukou Chikyuu Bouei-bu Love!": { - "showId": "38", - "kitsu_id": "9173" - }, - "Black Bullet": { - "showId": "39", - "kitsu_id": "8052" - }, - "Blade and Soul": { - "showId": "40", - "kitsu_id": "8293" - }, - "BlazBlue - Alter Memory": { - "showId": "41", - "kitsu_id": "7722" - }, - "Bleach": { - "showId": "42", - "kitsu_id": "244" - }, - "Blood Lad": { - "showId": "43", - "kitsu_id": "6552" - }, - "Blood-C": { - "showId": "44", - "kitsu_id": "6203" - }, - "Boku no Imouto wa Osaka Okan": { - "showId": "45", - "kitsu_id": "7423" - }, - "Bokura wa Minna Kawaisou": { - "showId": "46", - "kitsu_id": "8094" - }, - "Bonjour Sweet Love Patisserie": { - "showId": "47", - "kitsu_id": "8895" - }, - "Bottom Biting Bug": { - "showId": "48", - "kitsu_id": "7273" - }, - "Bottom Biting Bug S2": { - "showId": "48", - "kitsu_id": "7976" - }, - "Bottom Biting Bug S3": { - "showId": "48", - "kitsu_id": "9520" - }, - "Bottom Biting Bug S4": { - "showId": "48", - "kitsu_id": "11590" - }, - "Brave 10": { - "showId": "52", - "kitsu_id": "6481" - }, - "Brothers Conflict": { - "showId": "53", - "kitsu_id": "7280" - }, - "Brynhildr in the Darkness": { - "showId": "54", - "kitsu_id": "7996" - }, - "BTOOOM!": { - "showId": "55", - "kitsu_id": "7113" - }, - "Buddy Complex": { - "showId": "56", - "kitsu_id": "8139" - }, - "Buddy Complex Final Chapter": { - "showId": "56", - "kitsu_id": "8734" - }, - "Campione!": { - "showId": "58", - "kitsu_id": "6702" - }, - "Captain Earth": { - "showId": "59", - "kitsu_id": "7987" - }, - "Cardfight!! Vanguard": { - "showId": "60", - "kitsu_id": "5781" - }, - "Cardfight!! Vanguard (Asia Circuit)": { - "showId": "60", - "kitsu_id": "6893" - }, - "Cardfight!! Vanguard Legion Mate": { - "showId": "60", - "kitsu_id": "8264" - }, - "Cardfight!! Vanguard Link Joker": { - "showId": "60", - "kitsu_id": "7283" - }, - "Cardfight!! Vanguard G": { - "showId": "62", - "kitsu_id": "9781" - }, - "Chaos Dragon": { - "showId": "65", - "kitsu_id": "10619" - }, - "Charlotte": { - "showId": "66", - "kitsu_id": "10103" - }, - "Chihayafuru": { - "showId": "67", - "kitsu_id": "6355" - }, - "Chihayafuru S2": { - "showId": "68", - "kitsu_id": "7123" - }, - "Chitose Get You!": { - "showId": "69", - "kitsu_id": "7107" - }, - "Chuunibyou demo Koi ga Shitai! Ren": { - "showId": "70", - "kitsu_id": "7705" - }, - "Classroom Crisis": { - "showId": "71", - "kitsu_id": "10782" - }, - "Code Breaker": { - "showId": "72", - "kitsu_id": "6570" - }, - "Comet Lucifer": { - "showId": "73", - "kitsu_id": "11234" - }, - "Concrete Revolutio": { - "showId": "74", - "kitsu_id": "11165" - }, - "Coppelion": { - "showId": "75", - "kitsu_id": "5746" - }, - "Croisee in a Foreign Labyrinth": { - "showId": "76", - "kitsu_id": "5950" - }, - "Cross Ange": { - "showId": "77", - "kitsu_id": "8653" - }, - "Cuticle Detective Inaba": { - "showId": "78", - "kitsu_id": "7213" - }, - "D-Frag!": { - "showId": "79", - "kitsu_id": "8001" - }, - "Da Capo III": { - "showId": "80", - "kitsu_id": "7172" - }, - "Daimidaler": { - "showId": "81", - "kitsu_id": "8163" - }, - "Daitoshokan no Hitsujikai": { - "showId": "82", - "kitsu_id": "8002" - }, - "Dance with Devils": { - "showId": "83", - "kitsu_id": "10453" - }, - "Danchigai": { - "showId": "84", - "kitsu_id": "10620" - }, - "Danganronpa - The Animation": { - "showId": "85", - "kitsu_id": "7469" - }, - "DanMachi": { - "showId": "86", - "kitsu_id": "9962" - }, - "Danna ga Nani wo Itteiru ka Wakaranai Ken": { - "showId": "87", - "kitsu_id": "8891" - }, - "Danna ga Nani wo Itteiru ka Wakaranai Ken S2": { - "showId": "88", - "kitsu_id": "10148" - }, - "Dansai Bunri no Crime Edge": { - "showId": "89", - "kitsu_id": "7411" - }, - "Dantalian no Shoka": { - "showId": "90", - "kitsu_id": "5530" - }, - "Date A Live S2": { - "showId": "91", - "kitsu_id": "7864" - }, - "DD Hokuto no Ken 2 - Ichigo Aji+": { - "showId": "92", - "kitsu_id": "11080" - }, - "Deadman Wonderland": { - "showId": "93", - "kitsu_id": "4765" - }, - "Death Parade": { - "showId": "94", - "kitsu_id": "9969" - }, - "Denki-gai no Honya-san": { - "showId": "95", - "kitsu_id": "8629" - }, - "Denpa Kyoushi": { - "showId": "96", - "kitsu_id": "10235" - }, - "Detective Conan": { - "showId": "97", - "kitsu_id": "210" - }, - "DEVIL SURVIVOR 2 THE ANIMATION": { - "showId": "98", - "kitsu_id": "7446" - }, - "Diabolik Lovers": { - "showId": "99", - "kitsu_id": "7707" - }, - "Diabolik Lovers More, Blood": { - "showId": "100", - "kitsu_id": "10454" - }, - "Dog Days S2": { - "showId": "102", - "kitsu_id": "6598" - }, - "Dog Days S3": { - "showId": "103", - "kitsu_id": "7417" - }, - "Donten ni Warau": { - "showId": "104", - "kitsu_id": "7907" - }, - "Dragon Collection": { - "showId": "105", - "kitsu_id": "8352" - }, - "DRAMAtical Murder": { - "showId": "106", - "kitsu_id": "8331" - }, - "Durarara!! X2": { - "showId": "107", - "kitsu_id": "8314" - }, - "Dusk Maiden of Amnesia": { - "showId": "108", - "kitsu_id": "6734" - }, - "Ebiten": { - "showId": "109", - "kitsu_id": "7077" - }, - "Engaged to the Unidentified": { - "showId": "110", - "kitsu_id": "8027" - }, - "Etotama": { - "showId": "111", - "kitsu_id": "9976" - }, - "Eyeshield 21": { - "showId": "112", - "kitsu_id": "6" - }, - "Fairy Tail": { - "showId": "113", - "kitsu_id": "4676" - }, - "Fairy Tail S2": { - "showId": "114", - "kitsu_id": "8203" - }, - "Fantasista Doll": { - "showId": "115", - "kitsu_id": "7332" - }, - "Fate Kaleid Liner PRISMA ILLYA": { - "showId": "116", - "kitsu_id": "7173" - }, - "Fate Kaleid Liner PRISMA ILLYA 2wei Herz!": { - "showId": "117", - "kitsu_id": "9095" - }, - "Fate Kaleid Liner PRISMA ILLYA 2wei!": { - "showId": "118", - "kitsu_id": "8003" - }, - "Fate Stay Night - Unlimited Blade Works": { - "showId": "119", - "kitsu_id": "7882" - }, - "Fate Zero": { - "showId": "120", - "kitsu_id": "6028" - }, - "Fate Zero S2": { - "showId": "120", - "kitsu_id": "7658" - }, - "Folktales from Japan": { - "showId": "122", - "kitsu_id": "6897" - }, - "Free!": { - "showId": "123", - "kitsu_id": "7664" - }, - "Free! (Dub)": { - "showId": "123", - "kitsu_id": "7664" - }, - "Free! Eternal Summer": { - "showId": "124", - "kitsu_id": "8273" - }, - "Freezing Vibration": { - "showId": "125", - "kitsu_id": "7710" - }, - "Fuse Memoirs of the Hunter Girl": { - "showId": "126", - "kitsu_id": "6942" - }, - "Fushigi na Somera-chan": { - "showId": "127", - "kitsu_id": "10924" - }, - "Fuuun Ishin Dai Shogun": { - "showId": "128", - "kitsu_id": "8146" - }, - "Gakkou Gurashi!": { - "showId": "129", - "kitsu_id": "8644" - }, - "Gakusen Toshi Asterisk": { - "showId": "130", - "kitsu_id": "10857" - }, - "Galaxy Express 999": { - "showId": "131", - "kitsu_id": "1174" - }, - "Galilei Donna": { - "showId": "132", - "kitsu_id": "7836" - }, - "Gangsta": { - "showId": "133", - "kitsu_id": "8576" - }, - "Garo - The Animation": { - "showId": "134", - "kitsu_id": "8409" - }, - "Garo - The Crimson Moon": { - "showId": "135", - "kitsu_id": "10045" - }, - "Gatchaman Crowds": { - "showId": "136", - "kitsu_id": "7681" - }, - "Gatchaman Crowds Insight": { - "showId": "137", - "kitsu_id": "8180" - }, - "GATE": { - "showId": "138", - "kitsu_id": "10085" - }, - "gdgd Fairies 2": { - "showId": "139", - "kitsu_id": "7498" - }, - "Gekkan Shoujo Nozaki-kun": { - "showId": "140", - "kitsu_id": "8402" - }, - "Gen'ei o Kakeru Taiyou - Il Sole Penetra le Illusioni": { - "showId": "141", - "kitsu_id": "7670" - }, - "Genshiken Nidaime": { - "showId": "142", - "kitsu_id": "7677" - }, - "Ghost in the Shell Arise - Alternative Architecture": { - "showId": "143", - "kitsu_id": "10229" - }, - "Gifuu Doudou!! Kanetsugu to Keiji": { - "showId": "144", - "kitsu_id": "7744" - }, - "Gin no Saji": { - "showId": "145", - "kitsu_id": "7553" - }, - "Gin no Saji S2": { - "showId": "146", - "kitsu_id": "7860" - }, - "Gingitsune": { - "showId": "147", - "kitsu_id": "7703" - }, - "Gintama": { - "showId": "148", - "kitsu_id": "818" - }, - "Gintama Jump Special Anime Festa 2015": { - "showId": "148", - "kitsu_id": "11545" - }, - "Gintama Rerun": { - "showId": "148" - }, - "Girl Friend Beta": { - "showId": "150", - "kitsu_id": "8632" - }, - "GIRLS und PANZER": { - "showId": "151", - "kitsu_id": "7904" - }, - "GJ-bu": { - "showId": "152", - "kitsu_id": "7168" - }, - "Glasslip": { - "showId": "153", - "kitsu_id": "8325" - }, - "Gochuumon wa Usagi Desu ka": { - "showId": "154", - "kitsu_id": "8095" - }, - "Gochuumon wa Usagi Desu ka S2": { - "showId": "155", - "kitsu_id": "10346" - }, - "GOD EATER": { - "showId": "156", - "kitsu_id": "9130" - }, - "Golden Time": { - "showId": "157", - "kitsu_id": "7708" - }, - "Grisaia no Kajitsu": { - "showId": "158", - "kitsu_id": "7982" - }, - "Grisaia no Meikyuu": { - "showId": "159", - "kitsu_id": "10154" - }, - "Grisaia no Rakuen": { - "showId": "160", - "kitsu_id": "10155" - }, - "Gugure! Kokkuri-san": { - "showId": "161", - "kitsu_id": "8333" - }, - "Gundam Build Fighters": { - "showId": "162", - "kitsu_id": "7852" - }, - "Gundam Build Fighters Try": { - "showId": "163", - "kitsu_id": "8637" - }, - "Gundam Reconguista in G": { - "showId": "164", - "kitsu_id": "8391" - }, - "Gundam Unicorn": { - "showId": "165", - "kitsu_id": "4525" - }, - "Gunslinger Stratos": { - "showId": "166", - "kitsu_id": "10062" - }, - "Hackadoll the Animation": { - "showId": "167", - "kitsu_id": "10906" - }, - "Haikyuu!!": { - "showId": "168", - "kitsu_id": "8133" - }, - "Haikyuu!! S2": { - "showId": "169", - "kitsu_id": "10076" - }, - "Haiyore! Nyaruko-san": { - "showId": "170", - "kitsu_id": "6599" - }, - "Haiyore! Nyaruko-san W": { - "showId": "171", - "kitsu_id": "7295" - }, - "Hajime no Ippo - Rising": { - "showId": "172", - "kitsu_id": "7855" - }, - "Hakkenden - Eight Dogs of the East": { - "showId": "173", - "kitsu_id": "7284" - }, - "Hakkenden - Eight Dogs of the East S2": { - "showId": "174", - "kitsu_id": "7679" - }, - "Hakuoki Reimeiroku": { - "showId": "175", - "kitsu_id": "6884" - }, - "Hamatora": { - "showId": "176", - "kitsu_id": "8057" - }, - "Hanamonogatari": { - "showId": "177", - "kitsu_id": "8032" - }, - "Hanasaku Iroha": { - "showId": "178", - "kitsu_id": "5657" - }, - "Hanayamata": { - "showId": "179", - "kitsu_id": "8138" - }, - "Hayate no Gotoku! Can't Take My Eyes Off You": { - "showId": "180", - "kitsu_id": "7148" - }, - "Hayate no Gotoku! Cuties": { - "showId": "181", - "kitsu_id": "7561" - }, - "Heavy Object": { - "showId": "182", - "kitsu_id": "9731" - }, - "Hello!! Kiniro Mosaic": { - "showId": "183", - "kitsu_id": "8431" - }, - "Hentai Ouji to Warawanai Neko": { - "showId": "184", - "kitsu_id": "7233" - }, - "Hero Bank": { - "showId": "185", - "kitsu_id": "8282" - }, - "Hetalia - The World Twinkle": { - "showId": "186", - "kitsu_id": "10057" - }, - "Hi-sCoool! SeHa Girl": { - "showId": "187", - "kitsu_id": "8428" - }, - "Hibike! Euphonium": { - "showId": "188", - "kitsu_id": "9980" - }, - "High School Star Musical": { - "showId": "189", - "kitsu_id": "10783" - }, - "Highschool DxD BorN": { - "showId": "190", - "kitsu_id": "8514" - }, - "Hiiro no Kakera": { - "showId": "191", - "kitsu_id": "6739" - }, - "Hiiro no Kakera S2": { - "showId": "192", - "kitsu_id": "7146" - }, - "Himegoto": { - "showId": "193", - "kitsu_id": "8306" - }, - "Himouto! Umaru-chan": { - "showId": "194", - "kitsu_id": "10067" - }, - "Hitsugi no Chaika": { - "showId": "195", - "kitsu_id": "8008" - }, - "Hitsugi no Chaika - Avenging Battle": { - "showId": "196", - "kitsu_id": "8577" - }, - "Houkago no Pleiades": { - "showId": "197", - "kitsu_id": "5937" - }, - "Hozuki no Reitetsu": { - "showId": "198", - "kitsu_id": "8009" - }, - "Hunter x Hunter": { - "showId": "199", - "kitsu_id": "115" - }, - "Hyakka Ryouran Samurai Bride": { - "showId": "200", - "kitsu_id": "7244" - }, - "Hyperdimension Neptunia - The Animation": { - "showId": "202", - "kitsu_id": "7379" - }, - "ImoCho - Another Shitty Sister LN Adaptation": { - "showId": "204", - "kitsu_id": "8060" - }, - "ImoCho - Another Shitty Sister Manga Adaptation": { - "showId": "204", - "kitsu_id": "8060" - }, - "Inari, Konkon, Koi Iroha": { - "showId": "205", - "kitsu_id": "7988" - }, - "Infinite Stratos 2": { - "showId": "206", - "kitsu_id": "7733" - }, - "Inou Battle wa Nichijou-kei no Naka de": { - "showId": "207", - "kitsu_id": "8452" - }, - "Inu to Hasami wa Tsukaiyou": { - "showId": "208", - "kitsu_id": "7673" - }, - "Inu x Boku Secret Service": { - "showId": "209", - "kitsu_id": "6439" - }, - "Inugami-san to Nekoyama-san": { - "showId": "210", - "kitsu_id": "8263" - }, - "Ishida to Asakura": { - "showId": "211", - "kitsu_id": "7404" - }, - "ISUCA": { - "showId": "212", - "kitsu_id": "8645" - }, - "Itoshi no Muco": { - "showId": "213", - "kitsu_id": "10978" - }, - "Ixion Saga DT": { - "showId": "214", - "kitsu_id": "7165" - }, - "Jinrui wa Suitai Shimashita": { - "showId": "215", - "kitsu_id": "6146" - }, - "Jitsu wa Watashi wa": { - "showId": "216", - "kitsu_id": "10350" - }, - "JK Meshi!": { - "showId": "217", - "kitsu_id": "11369" - }, - "JoJo's Bizarre Adventure - Stardust Crusaders": { - "showId": "218", - "kitsu_id": "8063" - }, - "JoJo's Bizarre Adventure - Stardust Crusaders Egypt Arc": { - "showId": "218", - "kitsu_id": "8739" - }, - "Jormungand": { - "showId": "220", - "kitsu_id": "6726" - }, - "Joukamachi no Dandelion": { - "showId": "221", - "kitsu_id": "10017" - }, - "Junjou Romantica 3": { - "showId": "222", - "kitsu_id": "8728" - }, - "K": { - "showId": "223", - "kitsu_id": "7125" - }, - "K - Return of Kings": { - "showId": "224", - "kitsu_id": "9964" - }, - "Kaasan Mom's Life": { - "showId": "225", - "kitsu_id": "4432" - }, - "Kagewani": { - "showId": "226", - "kitsu_id": "10860" - }, - "Kagewani S2": { - "showId": "226", - "kitsu_id": "11822" - }, - "Kaiji - Ultimate Survivor": { - "showId": "227", - "kitsu_id": "2713" - }, - "Kaiji S2 - Against All Rules": { - "showId": "228", - "kitsu_id": "6109" - }, - "Kaitou Joker": { - "showId": "229", - "kitsu_id": "8664" - }, - "Kamigami no Asobi": { - "showId": "230", - "kitsu_id": "8160" - }, - "Kamisama Dolls": { - "showId": "231", - "kitsu_id": "6153" - }, - "Kamisama Kiss": { - "showId": "232", - "kitsu_id": "7157" - }, - "Kamisama Kiss 2": { - "showId": "233", - "kitsu_id": "8716" - }, - "Kamisama no Inai Nichiyoubi": { - "showId": "234", - "kitsu_id": "7358" - }, - "Kamisama no Memo-chou": { - "showId": "235", - "kitsu_id": "6244" - }, - "Kanojo ga Flag wo Oraretara": { - "showId": "236", - "kitsu_id": "8011" - }, - "Kantai Collection": { - "showId": "237", - "kitsu_id": "8039" - }, - "Karen Senki": { - "showId": "238", - "kitsu_id": "9100" - }, - "Kekkai Sensen": { - "showId": "239", - "kitsu_id": "8646" - }, - "Kill la Kill": { - "showId": "240", - "kitsu_id": "7712" - }, - "Kimi to Boku": { - "showId": "241", - "kitsu_id": "6191" - }, - "Kimi to Boku 2": { - "showId": "242", - "kitsu_id": "6581" - }, - "Kindaichi Case Files R": { - "showId": "243", - "kitsu_id": "8310" - }, - "Kindaichi Case Files R S2": { - "showId": "243", - "kitsu_id": "11211" - }, - "Kiniro Mosaic": { - "showId": "245", - "kitsu_id": "7501" - }, - "Kitakubu Katsudou Kiroku": { - "showId": "246", - "kitsu_id": "7676" - }, - "Kokoro Connect": { - "showId": "247", - "kitsu_id": "6626" - }, - "Komori-san wa Kotowarenai!": { - "showId": "248", - "kitsu_id": "11208" - }, - "Kono Naka ni Hitori, Imouto ga Iru!": { - "showId": "249", - "kitsu_id": "6947" - }, - "Kotoura-san": { - "showId": "250", - "kitsu_id": "7245" - }, - "Koufuku Graffiti": { - "showId": "251", - "kitsu_id": "8647" - }, - "Kuroko's Basketball": { - "showId": "252", - "kitsu_id": "6595" - }, - "Kuroko's Basketball 2": { - "showId": "252", - "kitsu_id": "7545" - }, - "Kuroko's Basketball 3": { - "showId": "252", - "kitsu_id": "8524" - }, - "Kuroshitsuji - Book of Circus": { - "showId": "255", - "kitsu_id": "8268" - }, - "Kuusen Madoushi Kouhosei no Kyoukan": { - "showId": "256", - "kitsu_id": "8650" - }, - "Kyoukai no Kanata": { - "showId": "257", - "kitsu_id": "7714" - }, - "Kyoukai no Rinne": { - "showId": "258", - "kitsu_id": [ - "10018", - "11366", - "12561" - ] - }, - "Kyoukai Senjou no Horizon S2": { - "showId": "259", - "kitsu_id": "6746" - }, - "Kyousougiga": { - "showId": "260", - "kitsu_id": "7870" - }, - "La Corda d'Oro Blue Sky": { - "showId": "261", - "kitsu_id": "8012" - }, - "La storia della Arcana Famiglia": { - "showId": "262", - "kitsu_id": "6859" - }, - "Lance N' Masques": { - "showId": "263", - "kitsu_id": "8666" - }, - "Little Busters!": { - "showId": "264", - "kitsu_id": "7005" - }, - "Little Busters! Refrain": { - "showId": "265", - "kitsu_id": "7704" - }, - "Little Witch Academia The Enchanted Parade": { - "showId": "266", - "kitsu_id": "7862" - }, - "Locodol": { - "showId": "267", - "kitsu_id": "8267" - }, - "Log Horizon": { - "showId": "268", - "kitsu_id": "7622" - }, - "Log Horizon 2": { - "showId": "269", - "kitsu_id": "8313" - }, - "Love Lab": { - "showId": "270", - "kitsu_id": "7410" - }, - "Love Live! School Idol Project S2": { - "showId": "271", - "kitsu_id": "7871" - }, - "Love Live! School Idol Project": { - "showId": "272", - "kitsu_id": "7203" - }, - "Love Stage!!": { - "showId": "273", - "kitsu_id": "7767" - }, - "Lychee Light Club": { - "showId": "274", - "kitsu_id": "7202" - }, - "M3 - Sono Kuroki Hagane": { - "showId": "275", - "kitsu_id": "8335" - }, - "Madan no Ou to Vanadis": { - "showId": "276", - "kitsu_id": "8630" - }, - "Magi": { - "showId": "277", - "kitsu_id": "7129" - }, - "Magi S2": { - "showId": "278", - "kitsu_id": "7696" - }, - "Magic Kaito 1412": { - "showId": "279", - "kitsu_id": "8636" - }, - "Magical Girl Lyrical Nanoha The MOVIE 2nd": { - "showId": "280", - "kitsu_id": "6056" - }, - "Magical Warfare": { - "showId": "281", - "kitsu_id": "7879" - }, - "Mahou Shoujo Taisen": { - "showId": "282", - "kitsu_id": "8380" - }, - "Mahouka": { - "showId": "283", - "kitsu_id": "8053" - }, - "Majestic Prince": { - "showId": "284", - "kitsu_id": "7325" - }, - "Majikoi~Oh! Samurai Girls": { - "showId": "285", - "kitsu_id": "6081" - }, - "Majimoji Rurumo": { - "showId": "286", - "kitsu_id": "8459" - }, - "Majimoji Rurumo OVA": { - "showId": "286", - "kitsu_id": "42121" - }, - "Majin Bone": { - "showId": "287", - "kitsu_id": "8283" - }, - "Makai Ouji - Devils and Realist": { - "showId": "288", - "kitsu_id": "7544" - }, - "Maken-ki! Two": { - "showId": "289", - "kitsu_id": "7275" - }, - "Makura no Danshi": { - "showId": "290", - "kitsu_id": "10907" - }, - "Mangaka-san to Assistant-san to": { - "showId": "291", - "kitsu_id": "8148" - }, - "Mangirl!": { - "showId": "292", - "kitsu_id": "7071" - }, - "Maoyuu Maou Yuusha": { - "showId": "293", - "kitsu_id": "7174" - }, - "Maria the Virgin Witch": { - "showId": "294", - "kitsu_id": "8951" - }, - "Medaka Box": { - "showId": "295", - "kitsu_id": "6591" - }, - "Medaka Box S2": { - "showId": "296", - "kitsu_id": "7132" - }, - "Meganebu!": { - "showId": "297", - "kitsu_id": "7851" - }, - "Mekakucity Actors": { - "showId": "298", - "kitsu_id": "8000" - }, - "Mikagura Gakuen Kumikyoku": { - "showId": "299", - "kitsu_id": "10072" - }, - "Military!": { - "showId": "300", - "kitsu_id": "8850" - }, - "Million Doll": { - "showId": "301", - "kitsu_id": "10465" - }, - "Miss Monochrome": { - "showId": "302", - "kitsu_id": "7911" - }, - "Miss Monochrome S2": { - "showId": "303", - "kitsu_id": "10765" - }, - "Miss Monochrome S3": { - "showId": "304", - "kitsu_id": "11370" - }, - "Mobile Suit Gundam - Iron-Blooded Orphans": { - "showId": "305", - "kitsu_id": "11206" - }, - "Mobile Suit Gundam The Origin": { - "showId": "306", - "kitsu_id": "6415" - }, - "Momo Kyun Sword": { - "showId": "307", - "kitsu_id": "8557" - }, - "Mondaijitachi ga Isekai Kara Kuru Sou Desu yo": { - "showId": "308", - "kitsu_id": "7239" - }, - "Monogatari Series Second Season": { - "showId": "309", - "kitsu_id": "7573" - }, - "Monster Musume no Iru Nichijou": { - "showId": "310", - "kitsu_id": "10748" - }, - "Moretsu Pirates": { - "showId": "311", - "kitsu_id": "5531" - }, - "Moritasan wa Mukuchi": { - "showId": "312", - "kitsu_id": "6285" - }, - "Moyashimon Returns": { - "showId": "313", - "kitsu_id": "6957" - }, - "Mushibugyo": { - "showId": "314", - "kitsu_id": "7653" - }, - "Mushishi S2": { - "showId": "315", - "kitsu_id": "8204" - }, - "Mushishi Tokubetsu-hen - Hihamukage": { - "showId": "316", - "kitsu_id": "8112" - }, - "Muv-Luv Alternative - Total Eclipse": { - "showId": "317", - "kitsu_id": "6442" - }, - "My Sister Came - Onee-chan ga Kita": { - "showId": "318", - "kitsu_id": "8083" - }, - "Mysterious Girlfriend X": { - "showId": "319", - "kitsu_id": "6740" - }, - "Nagi no Asukara": { - "showId": "320", - "kitsu_id": "7370" - }, - "Namiuchigiwa no Muromi-san": { - "showId": "321", - "kitsu_id": "7549" - }, - "Naruto SD - Rock Lee no Seishun Full-Power Ninden": { - "showId": "322", - "kitsu_id": "6861" - }, - "Naruto Shippuuden": { - "showId": "323", - "kitsu_id": "1555" - }, - "Natsume Yuujinchou San": { - "showId": "324", - "kitsu_id": "6157" - }, - "Natsume Yuujinchou Shi": { - "showId": "325", - "kitsu_id": "6557" - }, - "Natsuyuki Rendezvous": { - "showId": "326", - "kitsu_id": "6996" - }, - "Nekogami Yaoyorozu": { - "showId": "327", - "kitsu_id": "5947" - }, - "Nichijou": { - "showId": "328", - "kitsu_id": "6062" - }, - "Ninja Slayer": { - "showId": "329", - "kitsu_id": "8642" - }, - "Nisekoi": { - "showId": "330", - "kitsu_id": "7821" - }, - "Nisekoi S2": { - "showId": "331", - "kitsu_id": "9178" - }, - "Nisemonogatari": { - "showId": "332", - "kitsu_id": "6546" - }, - "No Game No Life": { - "showId": "333", - "kitsu_id": "7880" - }, - "No-Rin": { - "showId": "334", - "kitsu_id": "7782" - }, - "No. 6": { - "showId": "335", - "kitsu_id": "6059" - }, - "Nobunaga Concerto": { - "showId": "336", - "kitsu_id": "8558" - }, - "Nobunaga the Fool": { - "showId": "337", - "kitsu_id": "8076" - }, - "Nobunagun": { - "showId": "338", - "kitsu_id": "7771" - }, - "Non Non Biyori": { - "showId": "339", - "kitsu_id": "7711" - }, - "Non Non Biyori Repeat": { - "showId": "340", - "kitsu_id": "8410" - }, - "Noragami": { - "showId": "341", - "kitsu_id": "7881" - }, - "Noragami Aragoto": { - "showId": "342", - "kitsu_id": "10800" - }, - "NouKome": { - "showId": "343", - "kitsu_id": "7846" - }, - "Oda Nobuna no Yabou": { - "showId": "344", - "kitsu_id": "7657" - }, - "Okusama ga Seitokaichou!": { - "showId": "345", - "kitsu_id": "10069" - }, - "Okusama ga Seitokaichou! (Uncensored)": { - "showId": "345", - "kitsu_id": "10069" - }, - "One Piece": { - "showId": "347", - "kitsu_id": "12" - }, - "One Piece - Episode of Sabo": { - "showId": "348", - "kitsu_id": "11292" - }, - "One Piece 3D2Y": { - "showId": "349", - "kitsu_id": "8718" - }, - "One Week Friends": { - "showId": "350", - "kitsu_id": "8096" - }, - "One-Punch Man": { - "showId": "351", - "kitsu_id": "10740" - }, - "Onii-chan Dakedo Ai Sae Areba Kankeinai yo ne": { - "showId": "352", - "kitsu_id": "7094" - }, - "Onsen Yousei Hakone-chan": { - "showId": "353", - "kitsu_id": "11174" - }, - "Ookami Shoujo to Kuro Ouji": { - "showId": "354", - "kitsu_id": "8697" - }, - "Ore Monogatari!!": { - "showId": "355", - "kitsu_id": "10016" - }, - "Ore Twintail ni Narimasu": { - "showId": "356", - "kitsu_id": "8710" - }, - "Oreca Battle": { - "showId": "357", - "kitsu_id": "8395" - }, - "Oreimo S2": { - "showId": "358", - "kitsu_id": "7006" - }, - "Orenchi no Furo Jijou": { - "showId": "359", - "kitsu_id": "8575" - }, - "OreShura": { - "showId": "360", - "kitsu_id": "7162" - }, - "Osomatsu-san": { - "showId": "361", - "kitsu_id": "11178" - }, - "Outbreak Company": { - "showId": "362", - "kitsu_id": "7837" - }, - "OverLord": { - "showId": "363", - "kitsu_id": "9965" - }, - "Owarimonogatari": { - "showId": "364", - "kitsu_id": "11182" - }, - "Ozma": { - "showId": "365", - "kitsu_id": "6788" - }, - "Papa no Iukoto wo Kikinasai!": { - "showId": "366", - "kitsu_id": "6469" - }, - "Parasyte - the maxim": { - "showId": "367", - "kitsu_id": "8147" - }, - "Peeping Life S1": { - "showId": "368", - "kitsu_id": "4597" - }, - "Persona 4 - The Golden Animation": { - "showId": "369", - "kitsu_id": "8458" - }, - "Phi Brain S2": { - "showId": "370", - "kitsu_id": "6803" - }, - "Phi Brain S3": { - "showId": "371", - "kitsu_id": "7288" - }, - "Photo Kano": { - "showId": "372", - "kitsu_id": "7421" - }, - "Ping Pong the Animation": { - "showId": "373", - "kitsu_id": "8262" - }, - "Plastic Memories": { - "showId": "374", - "kitsu_id": "9538" - }, - "Polar Bear Cafe": { - "showId": "375", - "kitsu_id": "6821" - }, - "Poyopoyo": { - "showId": "376", - "kitsu_id": "6645" - }, - "Prison School": { - "showId": "377", - "kitsu_id": "10734" - }, - "PSYCHO-PASS": { - "showId": "378", - "kitsu_id": "7000" - }, - "PSYCHO-PASS Extended Edition": { - "showId": "378", - "kitsu_id": "8574" - }, - "PSYCHO-PASS 2": { - "showId": "379", - "kitsu_id": "7863" - }, - "Punch Line": { - "showId": "381", - "kitsu_id": "10038" - }, - "Pupa": { - "showId": "382", - "kitsu_id": "7845" - }, - "Queen's Blade Rebellion": { - "showId": "383", - "kitsu_id": "6620" - }, - "R-15": { - "showId": "384", - "kitsu_id": "6265" - }, - "Rail Wars!": { - "showId": "385", - "kitsu_id": "8155" - }, - "Rakudai Kishi no Cavalry": { - "showId": "386", - "kitsu_id": "10745" - }, - "Ranpo Kitan - Game of Laplace": { - "showId": "387", - "kitsu_id": "10039" - }, - "Re Hamatora": { - "showId": "388", - "kitsu_id": "8523" - }, - "Re-Kan!": { - "showId": "389", - "kitsu_id": "8668" - }, - "Recorder to Randoseru": { - "showId": "391", - "kitsu_id": "6519" - }, - "Recorder to Randoseru Mi": { - "showId": "392", - "kitsu_id": "7695" - }, - "Ro-Kyu-Bu - Fast Break!": { - "showId": "393", - "kitsu_id": "6246" - }, - "Robot Girls Z": { - "showId": "394", - "kitsu_id": "7875" - }, - "Robot Girls Z Plus": { - "showId": "395", - "kitsu_id": "10307" - }, - "Robotics;Notes": { - "showId": "396", - "kitsu_id": "6999" - }, - "Rokka no Yuusha": { - "showId": "397", - "kitsu_id": "10029" - }, - "Rokujouma no Shinryakusha": { - "showId": "398", - "kitsu_id": "8336" - }, - "Rowdy Sumo Wrestler Matsutaro": { - "showId": "399", - "kitsu_id": "8384" - }, - "Rozen Maiden (2013)": { - "showId": "400", - "kitsu_id": "7678" - }, - "Rurouni Kenshin": { - "showId": "401", - "kitsu_id": "27" - }, - "Ryuugajou Nanana no Maizoukin": { - "showId": "402", - "kitsu_id": "8162" - }, - "Sabagebu!": { - "showId": "403", - "kitsu_id": "8016" - }, - "Sacred Seven": { - "showId": "404", - "kitsu_id": "6058" - }, - "Saekano": { - "showId": "405", - "kitsu_id": "8406" - }, - "Sailor Moon Crystal": { - "showId": "406", - "kitsu_id": "7163" - }, - "Saint Seiya - Soul of Gold": { - "showId": "407", - "kitsu_id": "10026" - }, - "Saint Seiya Omega": { - "showId": "408", - "kitsu_id": "6850" - }, - "Saint Seiya The Lost Canvas": { - "showId": "409", - "kitsu_id": "4458" - }, - "Sakamichi no Apollon": { - "showId": "410", - "kitsu_id": "6760" - }, - "Saki - The Nationals": { - "showId": "411", - "kitsu_id": "7375" - }, - "Saki Episode of Side A": { - "showId": "412", - "kitsu_id": "6392" - }, - "Sakura Trick": { - "showId": "413", - "kitsu_id": "7978" - }, - "Sakurako-san no Ashimoto ni wa Shitai ga Umatteiru": { - "showId": "414", - "kitsu_id": "10706" - }, - "Sakurasou no Pet na Kanojo": { - "showId": "415", - "kitsu_id": "7023" - }, - "Samurai Flamenco": { - "showId": "416", - "kitsu_id": "7835" - }, - "Seiken Tsukai no World Break": { - "showId": "417", - "kitsu_id": "8339" - }, - "Seikoku no Dragonar": { - "showId": "418", - "kitsu_id": "7877" - }, - "Seirei Tsukai no Blade Dance": { - "showId": "419", - "kitsu_id": "7878" - }, - "Seitokai no Ichizon Lv.2": { - "showId": "420", - "kitsu_id": "6193" - }, - "Seitokai Yakuindomo S2": { - "showId": "421", - "kitsu_id": "8061" - }, - "Sekai de Ichiban Tsuyoku Naritai!": { - "showId": "422", - "kitsu_id": "6592" - }, - "Sekai Seifuku - Bouryaku no Zvezda": { - "showId": "423", - "kitsu_id": "8082" - }, - "selector infected WIXOSS": { - "showId": "424", - "kitsu_id": "8285" - }, - "selector spread WIXOSS": { - "showId": "425", - "kitsu_id": "8468" - }, - "Sengoku BASARA Judge End": { - "showId": "426", - "kitsu_id": "8272" - }, - "Sengoku Collection": { - "showId": "427", - "kitsu_id": "6774" - }, - "Sengoku Musou": { - "showId": "428", - "kitsu_id": "10013" - }, - "Sengoku Musou Sanada no Shou": { - "showId": "429", - "kitsu_id": "8194" - }, - "Senki Zesshou Symphogear GX": { - "showId": "430", - "kitsu_id": "8136" - }, - "Senyuu": { - "showId": "431", - "kitsu_id": "7303" - }, - "Senyuu S2": { - "showId": "431", - "kitsu_id": "7719" - }, - "Seraph of the End": { - "showId": "433", - "kitsu_id": "8736" - }, - "Seraph of the End S2": { - "showId": "434", - "kitsu_id": "10082" - }, - "Servant x Service": { - "showId": "435", - "kitsu_id": "7669" - }, - "She and Her Cat": { - "showId": "436", - "kitsu_id": "894" - }, - "Shigatsu wa Kimi no Uso": { - "showId": "437", - "kitsu_id": "8403" - }, - "Shimoneta": { - "showId": "438", - "kitsu_id": "10352" - }, - "Shin Atashinchi": { - "showId": "439", - "kitsu_id": "10977" - }, - "Shin Sekai Yori": { - "showId": "440", - "kitsu_id": "6887" - }, - "Shin Strange+": { - "showId": "441", - "kitsu_id": "8344" - }, - "Shingeki no Bahamut - Genesis": { - "showId": "442", - "kitsu_id": "8195" - }, - "Shingeki no Kyojin": { - "showId": "443", - "kitsu_id": "7442" - }, - "Shingeki no Kyojin S2": { - "showId": "443", - "kitsu_id": "8671" - }, - "Shingeki no Kyojin S3": { - "showId": "443", - "kitsu_id": [ - "13569", - "41982" - ] - }, - "Shingeki! Kyojin Chuugakkou": { - "showId": "444", - "kitsu_id": "11315" - }, - "Shinmai Maou no Testament": { - "showId": "445", - "kitsu_id": "8652" - }, - "Shinmai Maou no Testament BURST": { - "showId": "446", - "kitsu_id": "10757" - }, - "Shinryaku Ika Musume S2": { - "showId": "447", - "kitsu_id": "6156" - }, - "Shirobako": { - "showId": "448", - "kitsu_id": "8698" - }, - "Shokugeki no Soma": { - "showId": "449", - "kitsu_id": "9967" - }, - "Shokugeki no Soma S2": { - "showId": "449", - "kitsu_id": "11612" - }, - "Shomin Sample": { - "showId": "450", - "kitsu_id": "8651" - }, - "Shounen Hollywood": { - "showId": "451", - "kitsu_id": "8521" - }, - "Shounen Hollywood - Holly Stage for 50": { - "showId": "452", - "kitsu_id": "9175" - }, - "Show By Rock!!": { - "showId": "453", - "kitsu_id": "9729" - }, - "SKET Dance": { - "showId": "454", - "kitsu_id": "5908" - }, - "Slam Dunk": { - "showId": "455", - "kitsu_id": "148" - }, - "So, I Can't Play H!": { - "showId": "456", - "kitsu_id": "7656" - }, - "SoniAni - SUPER SONICO THE ANIMATION": { - "showId": "457", - "kitsu_id": "8031" - }, - "Sora no Method": { - "showId": "458", - "kitsu_id": "8337" - }, - "Sore ga Seiyuu!": { - "showId": "459", - "kitsu_id": "10153" - }, - "Soredemo Sekai wa Utsukushii": { - "showId": "460", - "kitsu_id": "8258" - }, - "Soukyuu no Fafner Dead Aggressor - Exodus": { - "showId": "461", - "kitsu_id": "7575" - }, - "Soukyuu no Fafner Dead Aggressor - Exodus S2": { - "showId": "461", - "kitsu_id": "10854" - }, - "Soul Eater Not!": { - "showId": "463", - "kitsu_id": "8151" - }, - "Space Brothers": { - "showId": "464", - "kitsu_id": "6729" - }, - "Space Dandy": { - "showId": "465", - "kitsu_id": "7910" - }, - "Space Dandy 2": { - "showId": "466", - "kitsu_id": "8312" - }, - "Sparrow's Hotel": { - "showId": "467", - "kitsu_id": "7654" - }, - "Steins;Gate": { - "showId": "468", - "kitsu_id": "5646" - }, - "Stella Jogakuin Koutouka C3-bu": { - "showId": "469", - "kitsu_id": "7671" - }, - "Straight Title Robot Anime": { - "showId": "470", - "kitsu_id": "7589" - }, - "Strange+": { - "showId": "471", - "kitsu_id": "8099" - }, - "Strike the Blood": { - "showId": "472", - "kitsu_id": "7715" - }, - "Subete ga F ni Naru": { - "showId": "473", - "kitsu_id": "10037" - }, - "Suisei no Gargantia": { - "showId": "474", - "kitsu_id": "7449" - }, - "Sukitte Ii na yo.": { - "showId": "475", - "kitsu_id": "7109" - }, - "Sword Art Online": { - "showId": "476", - "kitsu_id": "6589" - }, - "Sword Art Online EXTRA EDITION": { - "showId": "477", - "kitsu_id": "7914" - }, - "Sword Art Online II": { - "showId": "478", - "kitsu_id": "8174" - }, - "Taimadou Gakuen 35 Shiken Shoutai": { - "showId": "479", - "kitsu_id": "8669" - }, - "Takamiya Nasuno Desu!": { - "showId": "480", - "kitsu_id": "10074" - }, - "Tantei Team KZ Jiken Note": { - "showId": "481", - "kitsu_id": "11280" - }, - "Tari Tari": { - "showId": "482", - "kitsu_id": "6941" - }, - "Teekyu": { - "showId": "483", - "kitsu_id": "7217" - }, - "Teekyu S2": { - "showId": "483", - "kitsu_id": "7718" - }, - "Teekyu S3": { - "showId": "483", - "kitsu_id": "7980" - }, - "Teekyu S4": { - "showId": "483", - "kitsu_id": "8906" - }, - "Teekyu S5": { - "showId": "483", - "kitsu_id": "10858" - }, - "Teekyu S6": { - "showId": "483", - "kitsu_id": "11334" - }, - "Teekyu S7": { - "showId": "483", - "kitsu_id": "11597" - }, - "Teekyu S8": { - "showId": "483", - "kitsu_id": "12473" - }, - "Teekyu S9": { - "showId": "483", - "kitsu_id": "13342" - }, - "Terra Formars": { - "showId": "489", - "kitsu_id": "8356" - }, - "Terra Formars (Uncensored)": { - "showId": "489", - "kitsu_id": "8356" - }, - "Tesagure! Bukatsumono Spin-off Purupurun Sharumu to Asobou": { - "showId": "491", - "kitsu_id": "10339" - }, - "The Disappearance of Nagato Yuki-chan": { - "showId": "492", - "kitsu_id": "8144" - }, - "The iDOLM@STER": { - "showId": "494", - "kitsu_id": "6111" - }, - "THE iDOLM@STER CINDERELLA GIRLS": { - "showId": "495", - "kitsu_id": "8777" - }, - "The Knight in the Area": { - "showId": "496", - "kitsu_id": "6567" - }, - "The New Prince of Tennis": { - "showId": "497", - "kitsu_id": "6501" - }, - "The New Prince of Tennis OVA vs Genius10": { - "showId": "498", - "kitsu_id": "8034" - }, - "The New Prince of Tennis Specials": { - "showId": "499", - "kitsu_id": "6920" - }, - "The Pilot's Love Song": { - "showId": "500", - "kitsu_id": "7770" - }, - "The Rolling Girls": { - "showId": "501", - "kitsu_id": "8667" - }, - "The World God Only Knows - Goddesses Arc": { - "showId": "502", - "kitsu_id": "7496" - }, - "To LOVE-Ru Darkness 2nd": { - "showId": "505", - "kitsu_id": "10078" - }, - "Tokyo ESP": { - "showId": "506", - "kitsu_id": "7706" - }, - "Tokyo Ghoul": { - "showId": "507", - "kitsu_id": "8271" - }, - "Tokyo Ghoul Root A": { - "showId": "508", - "kitsu_id": "9135" - }, - "Tonari no Kaibutsu-kun": { - "showId": "510", - "kitsu_id": "7099" - }, - "Tonari no Seki-kun": { - "showId": "511", - "kitsu_id": "7761" - }, - "Toradora! (DUB)": { - "showId": "512", - "kitsu_id": "3532" - }, - "Toriko": { - "showId": "513", - "kitsu_id": "6002" - }, - "Triage X": { - "showId": "514", - "kitsu_id": "8952" - }, - "Tribe Cool Crew": { - "showId": "515", - "kitsu_id": "9153" - }, - "Trinity Seven": { - "showId": "516", - "kitsu_id": "8607" - }, - "Tsukimonogatari": { - "showId": "517", - "kitsu_id": "9961" - }, - "Tsuritama": { - "showId": "518", - "kitsu_id": "6836" - }, - "Twin Angel - Twinkle Paradise": { - "showId": "519", - "kitsu_id": "6083" - }, - "Uchouten Kazoku": { - "showId": "520", - "kitsu_id": "7675" - }, - "UN-GO": { - "showId": "521", - "kitsu_id": "6353" - }, - "Unbreakable Machine-Doll": { - "showId": "522", - "kitsu_id": "7617" - }, - "Unlimited Fafnir": { - "showId": "524", - "kitsu_id": "8649" - }, - "Upotte!!": { - "showId": "525", - "kitsu_id": "6704" - }, - "Urawa no Usagi-chan": { - "showId": "526", - "kitsu_id": "9949" - }, - "Usagi Drop": { - "showId": "527", - "kitsu_id": "6060" - }, - "Ushinawareta Mirai wo Motomete": { - "showId": "528", - "kitsu_id": "8199" - }, - "Ushio to Tora": { - "showId": "529", - "kitsu_id": "10359" - }, - "Uta No Prince Sama": { - "showId": "530", - "kitsu_id": "6126" - }, - "Uta no Prince Sama 2": { - "showId": "531", - "kitsu_id": "6796" - }, - "Uta no Prince Sama Revolutions": { - "showId": "532", - "kitsu_id": "8143" - }, - "Utakoi": { - "showId": "533", - "kitsu_id": "6943" - }, - "Utawarerumono - Itsuwari no Kamen": { - "showId": "534", - "kitsu_id": "11021" - }, - "Valvrave the Liberator": { - "showId": "535", - "kitsu_id": "7487" - }, - "Valvrave the Liberator S2": { - "showId": "536", - "kitsu_id": "7698" - }, - "Wakaba Girl": { - "showId": "538", - "kitsu_id": "10767" - }, - "Wakako Zake": { - "showId": "539", - "kitsu_id": "10844" - }, - "Wake Up, Girls ZOO!": { - "showId": "540", - "kitsu_id": "8812" - }, - "Wake Up, Girls!": { - "showId": "541", - "kitsu_id": "7774" - }, - "Wake Up, Girls! - Seven Idols": { - "showId": "541", - "kitsu_id": "8200" - }, - "Walkure Romanze": { - "showId": "543", - "kitsu_id": "7849" - }, - "Watamote": { - "showId": "544", - "kitsu_id": "7504" - }, - "White Album 2": { - "showId": "545", - "kitsu_id": "7697" - }, - "Witch Craft Works": { - "showId": "546", - "kitsu_id": "8017" - }, - "Wizard Barristers - Benmashi Cecil": { - "showId": "547", - "kitsu_id": "7898" - }, - "Wonder Momo": { - "showId": "548", - "kitsu_id": "8290" - }, - "Wooser no Sono Higurashi Kakusei-hen": { - "showId": "549", - "kitsu_id": "7979" - }, - "Wooser no Sono Higurashi Mugen-hen": { - "showId": "550", - "kitsu_id": "10138" - }, - "Working'!!": { - "showId": "551", - "kitsu_id": "6220" - }, - "Working!!!": { - "showId": "552", - "kitsu_id": "8712" - }, - "World Trigger": { - "showId": "553", - "kitsu_id": "8631" - }, - "Yahari Ore no Seishun Love Come wa Machigatteiru": { - "showId": "554", - "kitsu_id": "7169" - }, - "Yahari Ore no Seishun Love Come wa Machigatteiru Zoku": { - "showId": "555", - "kitsu_id": "8478" - }, - "Yama no Susume": { - "showId": "556", - "kitsu_id": "7117" - }, - "Yama no Susume 2": { - "showId": "557", - "kitsu_id": "8201" - }, - "Yamada-kun and the Seven Witches": { - "showId": "558", - "kitsu_id": "10042" - }, - "Yami Shibai - Japanese Ghost Stories": { - "showId": "559", - "kitsu_id": "7840" - }, - "Yami Shibai - Japanese Ghost Stories 2": { - "showId": "560", - "kitsu_id": "8359" - }, - "Yoru no Yatterman": { - "showId": "561", - "kitsu_id": "10011" - }, - "Young Black Jack": { - "showId": "562", - "kitsu_id": "10914" - }, - "Yowamushi Pedal": { - "showId": "563", - "kitsu_id": "7700" - }, - "Yowamushi Pedal - Grande Road": { - "showId": "564", - "kitsu_id": "8635" - }, - "Yuki Yuna wa Yusha de Aru": { - "showId": "565", - "kitsu_id": "8638" - }, - "Yuri Kuma Arashi": { - "showId": "566", - "kitsu_id": "8738" - }, - "Yurumate3Dei": { - "showId": "567", - "kitsu_id": "7156" - }, - "YuruYuri": { - "showId": "568", - "kitsu_id": "6205" - }, - "YuruYuri S2": { - "showId": "569", - "kitsu_id": "6724" - }, - "YuruYuri S3": { - "showId": "570", - "kitsu_id": "10742" - }, - "Yuushibu": { - "showId": "571", - "kitsu_id": "7725" - }, - "YUYUSHIKI": { - "showId": "572", - "kitsu_id": "7338" - }, - "Zankyou no Terror": { - "showId": "573", - "kitsu_id": "8342" - }, - "Zero no Tsukaima Final": { - "showId": "574", - "kitsu_id": "6493" - }, - "Zetsuen no Tempest": { - "showId": "576", - "kitsu_id": "7078" - }, - "Zettai Bouei Leviathan": { - "showId": "577", - "kitsu_id": "7644" - }, - "Zettai Karen Children THE UNLIMITED - Hyoubu Kyousuke": { - "showId": "578", - "kitsu_id": "7356" - }, - "ZX IGNITION": { - "showId": "579", - "kitsu_id": "8030" - }, - "Cardfight!! Vanguard G GIRS Crisis": { - "showId": "580", - "kitsu_id": "11220" - }, - "Ame-iro Cocoa S2": { - "showId": "581", - "kitsu_id": "11158" - }, - "Brave Beats": { - "showId": "582", - "kitsu_id": "11387" - }, - "Ani Tore! EX": { - "showId": "583", - "kitsu_id": "11347" - }, - "Valkyrie Drive - Mermaid": { - "showId": "584", - "kitsu_id": "10766" - }, - "Hidan no Aria AA": { - "showId": "585", - "kitsu_id": "10077" - }, - "Kateikyoushi Hitman Reborn!": { - "showId": "587", - "kitsu_id": "1444" - }, - "Digimon Adventure tri": { - "showId": "588", - "kitsu_id": "8684" - }, - "Digimon Xros Wars": { - "showId": "590", - "kitsu_id": "5404" - }, - "Digimon Xros Wars S2": { - "showId": "590", - "kitsu_id": "6183" - }, - "Senki Zesshou Symphogear": { - "showId": "594", - "kitsu_id": "6587" - }, - "Senki Zesshou Symphogear G": { - "showId": "595", - "kitsu_id": "7311" - }, - "Love Live! The School Idol Movie": { - "showId": "597", - "kitsu_id": "8531" - }, - "Wooser no Sono Higurashi": { - "showId": "599", - "kitsu_id": "7238" - }, - "Working!!": { - "showId": "600", - "kitsu_id": "4805" - }, - "Mobile Suit Gundam Thunderbolt": { - "showId": "602", - "kitsu_id": [ - "11476", - "12755" - ] - }, - "Durarara!!": { - "showId": "603", - "kitsu_id": "4696" - }, - "Musaigen no Phantom World": { - "showId": "605", - "kitsu_id": "11333" - }, - "Prince of Stride - Alternative": { - "showId": "606", - "kitsu_id": "11364" - }, - "Haruchika": { - "showId": "607", - "kitsu_id": "11020" - }, - "Active Raid": { - "showId": "608", - "kitsu_id": "11456" - }, - "Assassination Classroom S2": { - "showId": "609", - "kitsu_id": "10877" - }, - "Lupin III (2015)": { - "showId": "610", - "kitsu_id": "9958" - }, - "Boku dake ga Inai Machi": { - "showId": "611", - "kitsu_id": "11110" - }, - "Ojisan to Marshmallow": { - "showId": "612", - "kitsu_id": "11261" - }, - "Lupin III Part I": { - "showId": "613", - "kitsu_id": "1265" - }, - "Lupin III Part II": { - "showId": "614", - "kitsu_id": "1278" - }, - "Lupin III Part III": { - "showId": "615", - "kitsu_id": "1279" - }, - "Norn9 - Norn+Nonet": { - "showId": "616", - "kitsu_id": "11337" - }, - "Shoujo-tachi wa Kouya wo Mezasu": { - "showId": "617", - "kitsu_id": "11457" - }, - "Divine Gate": { - "showId": "618", - "kitsu_id": "11409" - }, - "Oshiete! Galko-chan": { - "showId": "619", - "kitsu_id": "11487" - }, - "Sekkou Boys": { - "showId": "620", - "kitsu_id": "11358" - }, - "Tabi Machi Late Show": { - "showId": "621", - "kitsu_id": "11668" - }, - "Koukaku no Pandora": { - "showId": "622", - "kitsu_id": "11587" - }, - "Shouwa Genroku Rakugo Shinjuu": { - "showId": "624", - "kitsu_id": "10051" - }, - "Phantasy Star Online 2 The Animation": { - "showId": "625", - "kitsu_id": "11200" - }, - "Bubuki Buranki": { - "showId": "626", - "kitsu_id": "11486" - }, - "Luck & Logic": { - "showId": "627", - "kitsu_id": "11536" - }, - "Nurse Witch Komugi-chan R": { - "showId": "628", - "kitsu_id": "11517" - }, - "Ooyasan wa Shishunki!": { - "showId": "629", - "kitsu_id": "11396" - }, - "Hai to Gensou no Grimgar": { - "showId": "630", - "kitsu_id": "11447" - }, - "Dimension W": { - "showId": "631", - "kitsu_id": "11170" - }, - "Nijiiro Days": { - "showId": "632", - "kitsu_id": "11323" - }, - "Schwarzesmarken": { - "showId": "633", - "kitsu_id": "10938" - }, - "Yami Shibai - Japanese Ghost Stories 3": { - "showId": "634", - "kitsu_id": "11484" - }, - "Mahou Shoujo Nante Mou Ii Desukara": { - "showId": "635", - "kitsu_id": "11552" - }, - "Saijaku Muhai no Bahamut": { - "showId": "637", - "kitsu_id": "10913" - }, - "Ao no Kanata no Four Rhythm": { - "showId": "638", - "kitsu_id": "10021" - }, - "Dagashi Kashi": { - "showId": "639", - "kitsu_id": "11381" - }, - "Kono Subarashii Sekai ni Shukufuku wo!": { - "showId": "640", - "kitsu_id": "10941" - }, - "Glass no Hana to Kowasu Sekai": { - "showId": "641", - "kitsu_id": "8971" - }, - "Noblesse - Awakening": { - "showId": "642", - "kitsu_id": "11806" - }, - "Kono Danshi, Mahou ga Oshigoto Desu": { - "showId": "643", - "kitsu_id": "11599" - }, - "She and Her Cat - Everything Flows": { - "showId": "644", - "kitsu_id": "11737" - }, - "DD Hokuto no Ken": { - "showId": "645", - "kitsu_id": "7646" - }, - "Hidan no Aria": { - "showId": "646", - "kitsu_id": "5407" - }, - "Brotherhood - Final Fantasy XV": { - "showId": "647", - "kitsu_id": "12019" - }, - "Space Patrol Luluco": { - "showId": "648", - "kitsu_id": "11818" - }, - "JoJo's Bizarre Adventure - Diamond is Unbreakable": { - "showId": "650", - "kitsu_id": "11459" - }, - "Terra Formars S2": { - "showId": "651", - "kitsu_id": "11344" - }, - "Mayoiga": { - "showId": "653", - "kitsu_id": "11682" - }, - "Ace Attorney": { - "showId": "654", - "kitsu_id": "11375" - }, - "Kiznaiver": { - "showId": "655", - "kitsu_id": "11437" - }, - "Endride": { - "showId": "657", - "kitsu_id": "11807" - }, - "Mobile Suit Gundam Unicorn RE 0096": { - "showId": "658", - "kitsu_id": "11850" - }, - "Boku no Hero Academia": { - "showId": "659", - "kitsu_id": [ - "11469", - "12268", - "13881", - "41971" - ] - }, - "Re Zero kara Hajimeru Isekai Seikatsu": { - "showId": "660", - "kitsu_id": [ - "11209", - "42198" - ] - }, - "Pan de Peace!": { - "showId": "661", - "kitsu_id": "11349" - }, - "Kuma Miko": { - "showId": "662", - "kitsu_id": "11446" - }, - "Macross Delta": { - "showId": "663", - "kitsu_id": "9992" - }, - "Hundred": { - "showId": "664", - "kitsu_id": "11029" - }, - "Bakuon!!": { - "showId": "665", - "kitsu_id": "10939" - }, - "Seisen Cerberus": { - "showId": "666", - "kitsu_id": "11779" - }, - "Shounen Ashibe Go! Go! Goma-chan": { - "showId": "667", - "kitsu_id": "12038" - }, - "Joker Game": { - "showId": "668", - "kitsu_id": "11320" - }, - "Super Lovers": { - "showId": "669", - "kitsu_id": "11485" - }, - "Bungou Stray Dogs": { - "showId": "670", - "kitsu_id": "11339" - }, - "Bishoujo Yuugi Unit Crane Game Girls": { - "showId": "671", - "kitsu_id": "11932" - }, - "Sousei no Onmyouji": { - "showId": "672", - "kitsu_id": "11553" - }, - "Anne Happy": { - "showId": "673", - "kitsu_id": "11134" - }, - "Netoge no Yome wa Onnanoko ja Nai to Omotta": { - "showId": "674", - "kitsu_id": "11319" - }, - "Kabaneri of the Iron Fortress": { - "showId": "676", - "kitsu_id": "10036" - }, - "Shounen Maid": { - "showId": "677", - "kitsu_id": "11570" - }, - "Sakamoto desu ga": { - "showId": "678", - "kitsu_id": "11751" - }, - "Flying Witch": { - "showId": "679", - "kitsu_id": "11317" - }, - "Tanaka-kun wa Itsumo Kedaruge": { - "showId": "680", - "kitsu_id": "11538" - }, - "Haifuri": { - "showId": "681", - "kitsu_id": "11346" - }, - "Sansha Sanyou": { - "showId": "682", - "kitsu_id": "11401" - }, - "Tonkatsu DJ Agetarou": { - "showId": "683", - "kitsu_id": "11318" - }, - "Wagamama High Spec": { - "showId": "684", - "kitsu_id": "11332" - }, - "Usakame": { - "showId": "685", - "kitsu_id": "11685" - }, - "Kuromukuro": { - "showId": "686", - "kitsu_id": "11605" - }, - "Onigiri": { - "showId": "687", - "kitsu_id": "11785" - }, - "Big Order": { - "showId": "688", - "kitsu_id": "11455" - }, - "Cardfight!! Vanguard G Stride Gate": { - "showId": "689", - "kitsu_id": "11857" - }, - "Tensei Shitara Slime Datta Ken": { - "showId": "1152", - "kitsu_id": "41024" - }, - "Wake Up, Girls! New Chapter": { - "showId": "Wake Up, Girls! New Chapter", - "kitsu_id": "13707" - }, - "Yowamushi Pedal Re RIDE": { - "showId": "691", - "kitsu_id": "8657" - }, - "Yowamushi Pedal Re ROAD": { - "showId": "691", - "kitsu_id": "8635" - }, - "Yowamushi Pedal The Movie": { - "showId": "691", - "kitsu_id": "10769" - }, - "Bonobono": { - "showId": "694", - "kitsu_id": "8967" - }, - "Berserk": { - "showId": "696", - "kitsu_id": "24" - }, - "ReLIFE": { - "showId": "697", - "kitsu_id": "10464" - }, - "Momokuri": { - "showId": "698", - "kitsu_id": "10466" - }, - "Love Live! Sunshine!!": { - "showId": "700", - "kitsu_id": "11745" - }, - "Rewrite": { - "showId": "702", - "kitsu_id": "11410" - }, - "Hatsukoi Monster": { - "showId": "703", - "kitsu_id": "11181" - }, - "B-Project": { - "showId": "704", - "kitsu_id": "12088" - }, - "DAYS": { - "showId": "705", - "kitsu_id": "11748" - }, - "Orange": { - "showId": "706", - "kitsu_id": "11844" - }, - "Fukigen na Mononokean": { - "showId": "708", - "kitsu_id": "11826" - }, - "Tales of Zestiria the X": { - "showId": "709", - "kitsu_id": "11023" - }, - "Bananya": { - "showId": "710", - "kitsu_id": "11912" - }, - "Puzzle and Dragons Cross": { - "showId": "711", - "kitsu_id": "11846" - }, - "Show By Rock!! Short!!": { - "showId": "712", - "kitsu_id": "11493" - }, - "Amaama to Inazuma": { - "showId": "713", - "kitsu_id": "11870" - }, - "D.Gray-man Hallow": { - "showId": "714", - "kitsu_id": "11654" - }, - "Taboo Tattoo": { - "showId": "715", - "kitsu_id": "10344" - }, - "Cheer Danshi!!": { - "showId": "716", - "kitsu_id": "11770" - }, - "Fudanshi Koukou Seikatsu": { - "showId": "717", - "kitsu_id": "12103" - }, - "Servamp": { - "showId": "718", - "kitsu_id": "11210" - }, - "New Game!": { - "showId": "719", - "kitsu_id": "11467" - }, - "Masou Gakuen HxH": { - "showId": "720", - "kitsu_id": "11529" - }, - "Scared Rider Xechs": { - "showId": "721", - "kitsu_id": "12026" - }, - "Tsukiuta. The Animation": { - "showId": "722", - "kitsu_id": "11998" - }, - "Ozmafia!!": { - "showId": "723", - "kitsu_id": "11829" - }, - "Fate Kaleid Liner PRISMA ILLYA 3rei!!": { - "showId": "724", - "kitsu_id": "11438" - }, - "Regalia - The Three Sacred Stars": { - "showId": "725", - "kitsu_id": "11948" - }, - "Binan Koukou Chikyuu Bouei-bu Love! S2": { - "showId": "726", - "kitsu_id": "11329" - }, - "Kono Bijutsubu ni wa Mondai ga Aru!": { - "showId": "727", - "kitsu_id": "11466" - }, - "Planetarian": { - "showId": "728", - "kitsu_id": "12023" - }, - "Amanchu!": { - "showId": "729", - "kitsu_id": "11432" - }, - "Alderamin on the Sky": { - "showId": "730", - "kitsu_id": "11433" - }, - "91 Days": { - "showId": "731", - "kitsu_id": "11957" - }, - "Thunderbolt Fantasy": { - "showId": "732", - "kitsu_id": "11838" - }, - "Time Travel Shoujo": { - "showId": "733", - "kitsu_id": "12236" - }, - "Handa-kun": { - "showId": "734", - "kitsu_id": "11802" - }, - "Qualidea Code": { - "showId": "735", - "kitsu_id": "11653" - }, - "Hitori no Shita - The Outcast": { - "showId": "736", - "kitsu_id": "12250" - }, - "Ange Vierge": { - "showId": "737", - "kitsu_id": "11593" - }, - "Active Raid S2": { - "showId": "738", - "kitsu_id": "11618" - }, - "Saiki Kusuo no Psi-nan": { - "showId": "739", - "kitsu_id": "12127" - }, - "Danganronpa 3 - Future Arc": { - "showId": "740", - "kitsu_id": "11579" - }, - "Mob Psycho 100": { - "showId": "741", - "kitsu_id": "11578" - }, - "Mob Pyscho 100 OVA": { - "showId": "741", - "kitsu_id": "41073" - }, - "Mahou Shoujo Naria Girls": { - "showId": "742", - "kitsu_id": "12244" - }, - "Danganronpa 3 - Despair Arc": { - "showId": "743", - "kitsu_id": "12105" - }, - "Battery": { - "showId": "744", - "kitsu_id": "11938" - }, - "One Piece - Heart of Gold": { - "showId": "745", - "kitsu_id": "12228" - }, - "Gundam Build Fighters Try Island Wars": { - "showId": "746", - "kitsu_id": "10872" - }, - "Persona 5 - THE DAY BREAKERS": { - "showId": "747", - "kitsu_id": "11602" - }, - "Mahoutsukai no Yome OVA": { - "showId": "749", - "kitsu_id": "11913" - }, - "Heybot!": { - "showId": "750", - "kitsu_id": "12346" - }, - "Dream Festival!": { - "showId": "751", - "kitsu_id": "12200" - }, - "Nyanbo!": { - "showId": "752", - "kitsu_id": "11945" - }, - "Kaijuu Girls": { - "showId": "753", - "kitsu_id": "12118" - }, - "Danganronpa 3 - Hope Arc": { - "showId": "754", - "kitsu_id": "12554" - }, - "Time Bokan 24": { - "showId": "755", - "kitsu_id": "12204" - }, - "Bloodivores": { - "showId": "756", - "kitsu_id": "12539" - }, - "Shuumatsu no Izetta": { - "showId": "757", - "kitsu_id": "12260" - }, - "WWW.Working!!": { - "showId": "758", - "kitsu_id": "12024" - }, - "Mahou Shoujo Ikusei Keikaku": { - "showId": "759", - "kitsu_id": "11363" - }, - "Uta no Prince Sama Legend Star": { - "showId": "760", - "kitsu_id": "11217" - }, - "Tiger Mask W": { - "showId": "761", - "kitsu_id": "11966" - }, - "Cardfight!! Vanguard G NEXT": { - "showId": "762", - "kitsu_id": "12564" - }, - "Monster Hunter Stories Ride On": { - "showId": "763", - "kitsu_id": "11584" - }, - "Show By Rock!! S2": { - "showId": "765", - "kitsu_id": "11494" - }, - "Magic-Kyun! Renaissance": { - "showId": "766", - "kitsu_id": "12182" - }, - "Okusama ga Seitokaichou! S2 (Uncensored)": { - "showId": "767", - "kitsu_id": "11784" - }, - "Touken Ranbu - Hanamaru": { - "showId": "768", - "kitsu_id": "11995" - }, - "Ao Oni The Animation": { - "showId": "769", - "kitsu_id": "12477" - }, - "Gakuen Handsome": { - "showId": "770", - "kitsu_id": "12482" - }, - "Trickster": { - "showId": "771", - "kitsu_id": "12234" - }, - "Shakunetsu no Takkyuu Musume": { - "showId": "772", - "kitsu_id": "12009" - }, - "Nobunaga no Shinobi": { - "showId": "773", - "kitsu_id": [ - "11871", - "13303", - "14207" - ] - }, - "Zutto Mae kara Suki deshita": { - "showId": "774", - "kitsu_id": "11204" - }, - "Soushin Shoujo Matoi": { - "showId": "775", - "kitsu_id": "12322" - }, - "Natsume Yuujinchou Go": { - "showId": "776", - "kitsu_id": "11950" - }, - "Natsume Yuujinchou Go Specials": { - "showId": "776", - "kitsu_id": "13143" - }, - "Nanbaka": { - "showId": "777", - "kitsu_id": "10467" - }, - "Cheating Craft": { - "showId": "778", - "kitsu_id": "12542" - }, - "TO BE HERO": { - "showId": "779", - "kitsu_id": "12536" - }, - "Mahou Shoujo Nante Mou Ii Desukara S2": { - "showId": "781", - "kitsu_id": "12467" - }, - "Ani Tore! XX": { - "showId": "782", - "kitsu_id": "12459" - }, - "Kiitarou Shounen no Youkai Enikki": { - "showId": "783", - "kitsu_id": "12119" - }, - "Bishoujo Yuugi Unit Crane Game Girls Galaxy": { - "showId": "784", - "kitsu_id": "12465" - }, - "Nazotokine": { - "showId": "785", - "kitsu_id": "12448" - }, - "Hibike! Euphonium S2": { - "showId": "786", - "kitsu_id": "11474" - }, - "Brave Witches": { - "showId": "788", - "kitsu_id": "11887" - }, - "Yuri!!! on Ice": { - "showId": "789", - "kitsu_id": "11999" - }, - "Flip Flappers": { - "showId": "790", - "kitsu_id": "11997" - }, - "Keijo!!!!!!!!": { - "showId": "791", - "kitsu_id": "11824" - }, - "All Out!!": { - "showId": "792", - "kitsu_id": "11373" - }, - "Bernard Jou Iwaku.": { - "showId": "793", - "kitsu_id": "12556" - }, - "Drifters": { - "showId": "794", - "kitsu_id": "11028" - }, - "Lostorage incited WIXOSS": { - "showId": "795", - "kitsu_id": "12065" - }, - "Haikyuu!! S3": { - "showId": "796", - "kitsu_id": "11935" - }, - "Watashi ga Motete Dousunda": { - "showId": "797", - "kitsu_id": "11910" - }, - "ClassicaLoid": { - "showId": "798", - "kitsu_id": "11172" - }, - "Long Riders!": { - "showId": "799", - "kitsu_id": "10878" - }, - "3-gatsu no Lion": { - "showId": "800", - "kitsu_id": "11380" - }, - "Occultic;Nine": { - "showId": "801", - "kitsu_id": "11949" - }, - "Sengoku Choujuu Giga": { - "showId": "802", - "kitsu_id": "12492" - }, - "Udon no Kuni no Kiniro Kemari": { - "showId": "803", - "kitsu_id": "11823" - }, - "Stella no Mahou": { - "showId": "804", - "kitsu_id": "11756" - }, - "Soul Buster": { - "showId": "805", - "kitsu_id": "11803" - }, - "Girlish Number": { - "showId": "806", - "kitsu_id": "11793" - }, - "Shelter": { - "showId": "807", - "imdb_id": "tt6443118" - }, - "3-Nen D-Gumi Glass no Kamen": { - "showId": "808", - "kitsu_id": "12567" - }, - "Dragon Ball Super": { - "showId": "809", - "kitsu_id": "10879" - }, - "Kuroko's Basketball Winter Cup Highlights": { - "showId": "810", - "kitsu_id": "11889" - }, - "Natsume Yuujinchou - Nyanko-sensei to Hajimete no Otsukai": { - "showId": "811", - "kitsu_id": "7747" - }, - "Hagane Orchestra": { - "showId": "812", - "kitsu_id": "12593" - }, - "Osomatsu-san - Ouma de Kobanashi": { - "showId": "813", - "kitsu_id": "12720" - }, - "Chain Chronicle - Haecceitas no Hikari (Movie)": { - "showId": "814", - "kitsu_id": "12463" - }, - "Koro-sensei Quest!": { - "showId": "815", - "kitsu_id": "12923" - }, - "Fate Grand Order - First Order": { - "showId": "816", - "kitsu_id": "12710" - }, - "Ai-Mai-Mi - Surgical Friends": { - "showId": "817", - "kitsu_id": "12864" - }, - "Akiba's Trip The Animation": { - "showId": "818", - "kitsu_id": "12532" - }, - "Masamune-kun no Revenge": { - "showId": "819", - "kitsu_id": "12267" - }, - "Masamune-kun no Revenge OVA": { - "showId": "819", - "kitsu_id": "41264" - }, - "Youjo Senki": { - "showId": "821", - "kitsu_id": "11794" - }, - "Minami Kamakura Koukou Joshi Jitensha-bu": { - "showId": "822", - "kitsu_id": "11330" - }, - "Fuuka": { - "showId": "823", - "kitsu_id": "12460" - }, - "Schoolgirl Strikers - Animation Channel": { - "showId": "824", - "kitsu_id": "12685" - }, - "Ao no Exorcist - Kyoto Fujouou-hen": { - "showId": "825", - "kitsu_id": "12275" - }, - "Shouwa Genroku Rakugo Shinjuu S2": { - "showId": "826", - "kitsu_id": "12022" - }, - "Seiren": { - "showId": "827", - "kitsu_id": "12673" - }, - "Urara Meirochou": { - "showId": "828", - "kitsu_id": "11934" - }, - "Spiritpact": { - "showId": "829", - "kitsu_id": "12862" - }, - "Demi-chan wa Kataritai": { - "showId": "830", - "kitsu_id": "12529" - }, - "Chain Chronicle - Haecceitas no Hikari (TV)": { - "showId": "831", - "kitsu_id": "10071" - }, - "Idol Jihen": { - "showId": "832", - "kitsu_id": "12596" - }, - "Nyanko Days": { - "showId": "833", - "kitsu_id": "12687" - }, - "elDLIVE": { - "showId": "834", - "kitsu_id": "11894" - }, - "Gabriel DropOut": { - "showId": "835", - "kitsu_id": "12497" - }, - "Chiruran - Nibun no Ichi": { - "showId": "836", - "kitsu_id": "12600" - }, - "Yowamushi Pedal - New Generation": { - "showId": "837", - "kitsu_id": "11583" - }, - "ACCA - 13-ku Kansatsu-ka": { - "showId": "838", - "kitsu_id": "12202" - }, - "Hand Shakers": { - "showId": "839", - "kitsu_id": "11951" - }, - "Kemono Friends": { - "showId": "840", - "kitsu_id": "12707" - }, - "Kobayashi-san Chi no Maid Dragon": { - "showId": "841", - "kitsu_id": "12243" - }, - "Kono Subarashii Sekai ni Shukufuku wo! 2": { - "showId": "842", - "kitsu_id": "11937" - }, - "One Room": { - "showId": "843", - "kitsu_id": "12758" - }, - "Piace - Watashi no Italian": { - "showId": "844", - "kitsu_id": "12274" - }, - "ChaoS;Child": { - "showId": "845", - "kitsu_id": "10786" - }, - "Marginal#4 - Kiss kara Tsukuru Big Bang": { - "showId": "846", - "kitsu_id": "12489" - }, - "Super Lovers S2": { - "showId": "847", - "kitsu_id": "12245" - }, - "Kuzu no Honkai": { - "showId": "848", - "kitsu_id": "11940" - }, - "Yami Shibai - Japanese Ghost Stories 4": { - "showId": "849", - "kitsu_id": "12783" - }, - "Granblue Fantasy The Animation": { - "showId": "850", - "kitsu_id": "11382" - }, - "BanG Dream!": { - "showId": "851", - "kitsu_id": "12330" - }, - "Ao Oni The Animation Movie": { - "showId": "852", - "kitsu_id": "12478" - }, - "The Dragon Dentist": { - "showId": "853", - "kitsu_id": "12641" - }, - "Trinity Seven Movie - Eternity Library and Alchemic Girl": { - "showId": "854", - "kitsu_id": "12324" - }, - "Monster Strike 2": { - "showId": "855", - "kitsu_id": "13316" - }, - "Gin no Guardian": { - "showId": "856", - "kitsu_id": "11936" - }, - "Folktales from Japan S2": { - "showId": "857", - "kitsu_id": "13331" - }, - "World Fool News Part II": { - "showId": "858", - "kitsu_id": "13320" - }, - "Alice to Zouroku": { - "showId": "859", - "kitsu_id": "12726" - }, - "Sekai no Yami Zukan": { - "showId": "860", - "kitsu_id": "13302" - }, - "Warau Salesman NEW": { - "showId": "862", - "kitsu_id": "12951" - }, - "High School Star Musical S2": { - "showId": "863", - "kitsu_id": "12241" - }, - "Frame Arms Girl": { - "showId": "864", - "kitsu_id": "12807" - }, - "THE iDOLM@STER CINDERELLA GIRLS Theater (TV)": { - "showId": "866", - "kitsu_id": [ - "12671", - "13895", - "41377", - "42229" - ] - }, - "THE iDOLM@STER CINDERELLA GIRLS Theater (Web)": { - "showId": "866", - "kitsu_id": "13327" - }, - "Rokudenashi Majutsu Koushi to Akashic Records": { - "showId": "867", - "kitsu_id": "11942" - }, - "Oushitsu Kyoushi Haine": { - "showId": "868", - "kitsu_id": "12667" - }, - "Boruto - Naruto Next Generations": { - "showId": "869", - "kitsu_id": "13051" - }, - "Sakura Quest": { - "showId": "870", - "kitsu_id": "12793" - }, - "Busou Shoujo Machiavellianism": { - "showId": "871", - "kitsu_id": "12265" - }, - "Sagrada Reset": { - "showId": "872", - "kitsu_id": "12599" - }, - "Seikaisuru Kado": { - "showId": "873", - "kitsu_id": "11490" - }, - "Tsuki ga Kirei": { - "showId": "874", - "kitsu_id": "13234" - }, - "Renai Boukun": { - "showId": "875", - "kitsu_id": "11610" - }, - "Clockwork Planet": { - "showId": "876", - "kitsu_id": "11662" - }, - "Hinako Note": { - "showId": "877", - "kitsu_id": "12644" - }, - "Twin Angel BREAK": { - "showId": "878", - "kitsu_id": "12295" - }, - "Love Kome - We Love Rice": { - "showId": "879", - "kitsu_id": "13148" - }, - "Kabukibu!": { - "showId": "880", - "kitsu_id": "12487" - }, - "Shingeki no Bahamut - Virgin Soul": { - "showId": "881", - "kitsu_id": "10902" - }, - "Eromanga-sensei": { - "showId": "882", - "kitsu_id": "11914" - }, - "Re-Creators": { - "showId": "883", - "kitsu_id": "8668" - }, - "Uchouten Kazoku S2": { - "showId": "884", - "kitsu_id": "12551" - }, - "Tsugumomo": { - "showId": "885", - "kitsu_id": "12534" - }, - "Zero kara Hajimeru Mahou no Sho": { - "showId": "886", - "kitsu_id": "12623" - }, - "Makeruna!! Aku no Gundan!": { - "showId": "887", - "kitsu_id": "13361" - }, - "Fukumenkei Noise": { - "showId": "888", - "kitsu_id": "12117" - }, - "Shuumatsu Nani Shitemasuka Isogashii Desuka Sukutte Moratte Ii Desuka": { - "showId": "889", - "kitsu_id": "12769" - }, - "Natsume Yuujinchou Roku": { - "showId": "890", - "kitsu_id": "13077" - }, - "Natsume Yuujinchou Roku Specials": { - "showId": "890", - "kitsu_id": "13757" - }, - "Kenka Banchou Otome - Girl Beats Boys": { - "showId": "891", - "kitsu_id": "12821" - }, - "Room Mate": { - "showId": "892", - "kitsu_id": "12759" - }, - "Saekano S2": { - "showId": "893", - "kitsu_id": "10909" - }, - "DanMachi Gaiden - Sword Oratoria": { - "showId": "894", - "kitsu_id": "11902" - }, - "Sin - Nanatsu no Taizai": { - "showId": "895", - "kitsu_id": "12540" - }, - "100% Pascal-sensei": { - "showId": "896", - "kitsu_id": "13433" - }, - "PriPri Chii-chan!!": { - "showId": "897", - "kitsu_id": "13434" - }, - "Atom - The Beginning": { - "showId": "898", - "kitsu_id": "12235" - }, - "Blame! Movie": { - "showId": "899", - "kitsu_id": "11537" - }, - "Koe no Katachi": { - "showId": "900", - "kitsu_id": "10028" - }, - "Yu-Gi-Oh! VRAINS": { - "showId": "901", - "kitsu_id": "13189" - }, - "Monster Strike The Movie": { - "showId": "902", - "kitsu_id": "12504" - }, - "Suki ni Naru Sono Shunkan wo": { - "showId": "903", - "kitsu_id": "12001" - }, - "Hina Logi - From Luck & Logic": { - "showId": "904", - "kitsu_id": "13545" - }, - "Enmusubi no Youko-chan": { - "showId": "907", - "kitsu_id": "13616" - }, - "Katsugeki Touken Ranbu": { - "showId": "908", - "kitsu_id": "11994" - }, - "Knight's & Magic": { - "showId": "909", - "kitsu_id": "13274" - }, - "Keppeki Danshi! Aoyama-kun": { - "showId": "910", - "kitsu_id": "13280" - }, - "Yami Shibai - Japanese Ghost Stories 5": { - "showId": "911", - "kitsu_id": "13576" - }, - "Battle Girl High School": { - "showId": "912", - "kitsu_id": "13115" - }, - "Isekai Shokudou": { - "showId": "913", - "kitsu_id": "12535" - }, - "Youkai Apartment no Yuuga na Nichijou": { - "showId": "914", - "kitsu_id": "13260" - }, - "Koi to Uso": { - "showId": "915", - "kitsu_id": "13257" - }, - "Aho Girl": { - "showId": "916", - "kitsu_id": "13259" - }, - "Tsurezure Children": { - "showId": "917", - "kitsu_id": "13258" - }, - "Nana Maru San Batsu": { - "showId": "918", - "kitsu_id": "13263" - }, - "Netsuzou TRap - NTR": { - "showId": "919", - "kitsu_id": "12757" - }, - "Saiyuki Reload Blast": { - "showId": "920", - "kitsu_id": "12464" - }, - "Dive!!": { - "showId": "921", - "kitsu_id": "13007" - }, - "Konbini Kareshi": { - "showId": "922", - "kitsu_id": "13537" - }, - "Castlevania": { - "showId": "923", - "kitsu_id": "13529" - }, - "Made in Abyss": { - "showId": "924", - "kitsu_id": "13273" - }, - "Vatican Kiseki Chousakan": { - "showId": "925", - "kitsu_id": "12732" - }, - "Ballroom e Youkoso": { - "showId": "926", - "kitsu_id": "13068" - }, - "Shoukoku no Altair": { - "showId": "927", - "kitsu_id": "13057" - }, - "18if": { - "showId": "928", - "kitsu_id": "13281" - }, - "Hitorijime My Hero": { - "showId": "929", - "kitsu_id": "12318" - }, - "Princess Principal": { - "showId": "930", - "kitsu_id": "13261" - }, - "Centaur no Nayami": { - "showId": "931", - "kitsu_id": "13270" - }, - "Jikan no Shihaisha": { - "showId": "932", - "kitsu_id": "12971" - }, - "Action Heroine Cheer Fruits": { - "showId": "933", - "kitsu_id": "13539" - }, - "Tenshi no 3P!": { - "showId": "934", - "kitsu_id": "12624" - }, - "Isekai wa Smartphone to Tomo ni.": { - "showId": "935", - "kitsu_id": "13457" - }, - "New Game!!": { - "showId": "936", - "kitsu_id": "13236" - }, - "Mahoujin Guru Guru (2017)": { - "showId": "937", - "kitsu_id": "13402" - }, - "Clione no Akari": { - "showId": "938", - "kitsu_id": "13231" - }, - "Hajimete no Gal": { - "showId": "939", - "kitsu_id": "12761" - }, - "Ikemen Sengoku": { - "showId": "940", - "kitsu_id": "13642" - }, - "Nora to Oujo to Noraneko Heart": { - "showId": "941", - "kitsu_id": "11811" - }, - "Youkoso Jitsuryoku Shijou Shugi no Kyoushitsu e": { - "showId": "942", - "kitsu_id": "13503" - }, - "Musekinin Galaxy Tylor": { - "showId": "943", - "kitsu_id": "13561" - }, - "Gamers!": { - "showId": "945", - "kitsu_id": "12754" - }, - "Jigoku Shoujo - Yoi no Togi": { - "showId": "946", - "kitsu_id": "13249" - }, - "The Reflection": { - "showId": "947", - "kitsu_id": "11473" - }, - "Gundam Build Fighters Battlogue": { - "showId": "949", - "kitsu_id": "13711" - }, - "Owarimonogatari S2": { - "showId": "950", - "kitsu_id": "13268" - }, - "Little Witch Academia": { - "showId": "951", - "kitsu_id": "12272" - }, - "Dream Festival! R": { - "showId": "952", - "kitsu_id": "12948" - }, - "Gundam Build Fighters GM's Counterattack": { - "showId": "953", - "kitsu_id": "13756" - }, - "One Piece - Episode of East Blue": { - "showId": "954", - "kitsu_id": "13623" - }, - "Blade Runner Black Out 2022": { - "showId": "955", - "kitsu_id": "13811" - }, - "The iDOLM@STER Side M": { - "showId": "956", - "kitsu_id": "13755" - }, - "Osomatsu-san S2": { - "showId": "957", - "kitsu_id": "13326" - }, - "UQ Holder!": { - "showId": "958", - "kitsu_id": "12273" - }, - "Black Clover": { - "showId": "959", - "kitsu_id": "13209" - }, - "Sengoku Night Blood": { - "showId": "960", - "kitsu_id": "13784" - }, - "Juuni Taisen": { - "showId": "961", - "kitsu_id": "13225" - }, - "Shokugeki no Soma S3": { - "showId": "962", - "kitsu_id": "13581" - }, - "Osake wa Fuufu ni Natte Kara": { - "showId": "963", - "kitsu_id": "13719" - }, - "URAHARA": { - "showId": "964", - "kitsu_id": "13638" - }, - "Konohana Kitan": { - "showId": "965", - "kitsu_id": "13752" - }, - "Tsukipro The Animation": { - "showId": "966", - "kitsu_id": "13721" - }, - "Ousama Game": { - "showId": "967", - "kitsu_id": "13727" - }, - "Just Because!": { - "showId": "968", - "kitsu_id": "13530" - }, - "Ame-con!!": { - "showId": "969", - "kitsu_id": "13913" - }, - "Pikotarou no Lullaby Lullaby (Web)": { - "showId": "970", - "kitsu_id": "13572" - }, - "Taishou Chicchai-san": { - "showId": "971", - "kitsu_id": "13065" - }, - "Net-juu no Susume": { - "showId": "972", - "kitsu_id": "13703" - }, - "Kino no Tabi (2017)": { - "showId": "973", - "kitsu_id": "13467" - }, - "Dies Irae": { - "showId": "974", - "kitsu_id": "11212" - }, - "Shoujo Shuumatsu Ryokou": { - "showId": "975", - "kitsu_id": "13597" - }, - "Yuki Yuna wa Yusha de Aru - Washio Sumi no Shou": { - "showId": "976", - "kitsu_id": [ - "12678", - "14029" - ] - }, - "ID-0": { - "showId": "978", - "kitsu_id": "12484" - }, - "Time Bokan 24 S2": { - "showId": "979", - "kitsu_id": "13484" - }, - "Code Realize - Sousei no Himegimi": { - "showId": "980", - "kitsu_id": "11338" - }, - "Garo - Vanishing Line": { - "showId": "981", - "kitsu_id": "13730" - }, - "ClassicaLoid S2": { - "showId": "982", - "kitsu_id": "13317" - }, - "Dynamic Chord": { - "showId": "983", - "kitsu_id": "12945" - }, - "Love Live! Sunshine!! S2": { - "showId": "984", - "kitsu_id": "13299" - }, - "Monster Strike 3": { - "showId": "985", - "kitsu_id": "13970" - }, - "Two Car": { - "showId": "986", - "kitsu_id": "13680" - }, - "Blend S": { - "showId": "987", - "kitsu_id": "13465" - }, - "Mahoutsukai no Yome": { - "showId": "988", - "kitsu_id": "13228" - }, - "Houseki no Kuni": { - "showId": "989", - "kitsu_id": "13521" - }, - "Kekkai Sensen & Beyond": { - "showId": "990", - "kitsu_id": "12770" - }, - "Hozuki no Reitetsu S2": { - "showId": "991", - "kitsu_id": [ - "13226", - "14157" - ] - }, - "Cardfight!! Vanguard G Z": { - "showId": "992", - "kitsu_id": "13786" - }, - "Animegataris": { - "showId": "993", - "kitsu_id": "13699" - }, - "Imouto sae Ireba Ii.": { - "showId": "994", - "kitsu_id": "11207" - }, - "Himouto! Umaru-chan R": { - "showId": "995", - "kitsu_id": "13489" - }, - "Love Kome S2": { - "showId": "996", - "kitsu_id": "13901" - }, - "Wake Up, Girls! Shin Shou": { - "showId": "998", - "kitsu_id": "13707" - }, - "Evil or Live": { - "showId": "999", - "kitsu_id": "13824" - }, - "Onyankopon": { - "showId": "1000", - "kitsu_id": "13908" - }, - "Boku no Kanojo ga Majimesugiru Sho-bitch na Ken": { - "showId": "1001", - "kitsu_id": "13693" - }, - "Inuyashiki": { - "showId": "1002", - "kitsu_id": "13096" - }, - "IDOLiSH7": { - "showId": "1004", - "kitsu_id": "12558" - }, - "Binan Koukou Chikyuu Bouei-bu Love! Love! Love!": { - "showId": "1005", - "kitsu_id": "13651" - }, - "Yuki Yuna wa Yusha de Aru - Yusha no Shou": { - "showId": "1006", - "kitsu_id": "13160" - }, - "Itsudatte Bokura no Koi wa 10 cm Datta.": { - "showId": "1007", - "kitsu_id": "13788" - }, - "Sora yori mo Tooi Basho": { - "showId": "1008", - "kitsu_id": "13615" - }, - "Ramen Daisuki Koizumi-san": { - "showId": "1009", - "kitsu_id": "13531" - }, - "Yuru Camp": { - "showId": "1010", - "kitsu_id": "13480" - }, - "Devilman Crybaby": { - "showId": "1011", - "kitsu_id": "13230" - }, - "Toji no Miko": { - "showId": "1012", - "kitsu_id": "13710" - }, - "Grancrest Senki": { - "showId": "1013", - "kitsu_id": "12705" - }, - "Ito Junji Collection": { - "showId": "1014", - "kitsu_id": "13717" - }, - "Hataraku Onii-san!": { - "showId": "1015", - "kitsu_id": "14161" - }, - "Sanrio Danshi": { - "showId": "1016", - "kitsu_id": "13714" - }, - "Citrus": { - "showId": "1017", - "kitsu_id": "12737" - }, - "Slow Start": { - "showId": "1018", - "kitsu_id": "13712" - }, - "Pop Team Epic": { - "showId": "1019", - "kitsu_id": "13319" - }, - "Cardcaptor Sakura Clear Card": { - "showId": "1020", - "kitsu_id": "12237" - }, - "Mitsuboshi Colors": { - "showId": "1021", - "kitsu_id": "13227" - }, - "Gakuen Babysitters": { - "showId": "1022", - "kitsu_id": "13265" - }, - "Kokkoku": { - "showId": "1023", - "kitsu_id": "13958" - }, - "Ryuuou no Oshigoto!": { - "showId": "1024", - "kitsu_id": "13661" - }, - "Karakai Jouzu no Takagi-san": { - "showId": "1025", - "kitsu_id": "13635" - }, - "Micchiri Neko": { - "showId": "1026", - "kitsu_id": "14162" - }, - "Basilisk - Ouka Ninpouchou": { - "showId": "1027", - "kitsu_id": "13676" - }, - "Yowamushi Pedal - Glory Line": { - "showId": "1029", - "kitsu_id": "13594" - }, - "Overlord II": { - "showId": "1030", - "kitsu_id": "13237" - }, - "Kaijuu Girls S2": { - "showId": "1031", - "kitsu_id": "14152" - }, - "Hitori no Shita - The Outcast S2": { - "showId": "1032", - "kitsu_id": "13885" - }, - "Dame x Prince Anime Caravan": { - "showId": "1033", - "kitsu_id": "13706" - }, - "Violet Evergarden": { - "showId": "1034", - "kitsu_id": "12230" - }, - "Death March kara Hajimaru Isekai Kyousoukyoku": { - "showId": "1035", - "kitsu_id": "13276" - }, - "Koi wa Ameagari no You ni": { - "showId": "1036", - "kitsu_id": "13277" - }, - "Marchen Madchen": { - "showId": "1037", - "kitsu_id": "13700" - }, - "Miira no Kaikata": { - "showId": "1038", - "kitsu_id": "13729" - }, - "Hakumei to Mikochi": { - "showId": "1039", - "kitsu_id": "13950" - }, - "Hakata Tonkotsu Ramens": { - "showId": "1040", - "kitsu_id": "14024" - }, - "Killing Bites": { - "showId": "1041", - "kitsu_id": "14082" - }, - "Hakyuu Houshin Engi": { - "showId": "1042", - "kitsu_id": "13686" - }, - "Takunomi": { - "showId": "1043", - "kitsu_id": "13992" - }, - "Gin no Guardian S2": { - "showId": "1044", - "kitsu_id": "13573" - }, - "Darling in the FranXX": { - "showId": "1045", - "kitsu_id": "13600" - }, - "Dagashi Kashi S2": { - "showId": "1046", - "kitsu_id": "13701" - }, - "Beatless": { - "showId": "1047", - "kitsu_id": [ - "13939", - "41407" - ] - }, - "Zoku Touken Ranbu - Hanamaru": { - "showId": "1048", - "kitsu_id": "13478" - }, - "gdgd men's party": { - "showId": "1049", - "kitsu_id": "14093" - }, - "Godzilla - Kaijuu Wakusei": { - "showId": "1050", - "kitsu_id": "12634" - }, - "Emiya-san Chi no Kyou no Gohan": { - "showId": "1051", - "kitsu_id": "14154" - }, - "Spiritpact S2": { - "showId": "1052", - "kitsu_id": "14144" - }, - "B - The Beginning": { - "showId": "1053", - "kitsu_id": "11880" - }, - "A.I.C.O. - Incarnation": { - "showId": "1054", - "kitsu_id": "13696" - }, - "Sword Gai The Animation": { - "showId": "1056", - "kitsu_id": "9730" - }, - "Sword Gai The Animation S2": { - "showId": "1056", - "kitsu_id": "41175" - }, - "Mahou Shoujo Ore": { - "showId": "1057", - "kitsu_id": "14072" - }, - "Gegege no Kitarou (2018)": { - "showId": "1058", - "kitsu_id": "14246" - }, - "Uma Musume - Pretty Derby": { - "showId": "1059", - "kitsu_id": "13485" - }, - "Kakuriyo no Yadomeshi": { - "showId": "1060", - "kitsu_id": "40580" - }, - "Uchuu Senkan Tiramisu": { - "showId": "1061", - "kitsu_id": "40875" - }, - "Souten no Ken Re-Genesis": { - "showId": "1062", - "kitsu_id": [ - "13983", - "41953" - ] - }, - "Gundam Build Divers": { - "showId": "1063", - "kitsu_id": "40565" - }, - "Legend of the Galactic Heroes - Die Neue These": { - "showId": "1064", - "kitsu_id": "11331" - }, - "Tachibanakan To Lie Angle": { - "showId": "1065", - "kitsu_id": "41016" - }, - "Lupin III Part V": { - "showId": "1066", - "kitsu_id": "13749" - }, - "3D Kanojo Real Girl": { - "showId": "1067", - "kitsu_id": "14276" - }, - "Tokyo Ghoul re": { - "showId": "1068", - "kitsu_id": "13929" - }, - "Alice or Alice": { - "showId": "1069", - "kitsu_id": "13679" - }, - "Tada-kun wa Koi wo Shinai": { - "showId": "1070", - "kitsu_id": "13888" - }, - "Megalo Box": { - "showId": "1071", - "kitsu_id": "13949" - }, - "Comic Girls": { - "showId": "1072", - "kitsu_id": "13722" - }, - "Saredo Tsumibito wa Ryuu to Odoru": { - "showId": "1073", - "kitsu_id": "12626" - }, - "Gurazeni": { - "showId": "1074", - "kitsu_id": "13981" - }, - "Akkun to Kanojo": { - "showId": "1075", - "kitsu_id": "14202" - }, - "Lostorage Conflated WIXOSS": { - "showId": "1076", - "kitsu_id": "13720" - }, - "Mahou Shoujo Site": { - "showId": "1077", - "kitsu_id": "14137" - }, - "Hinamatsuri": { - "showId": "1078", - "kitsu_id": "14018" - }, - "Major 2nd": { - "showId": "1079", - "kitsu_id": "13952" - }, - "Devils Line": { - "showId": "1080", - "kitsu_id": "13708" - }, - "Omae wa Mada Gunma wo Shiranai": { - "showId": "1081", - "kitsu_id": "41146" - }, - "Sword Art Online Alternative - Gun Gale Online": { - "showId": "1082", - "kitsu_id": "13894" - }, - "Amanchu! Advance": { - "showId": "1083", - "kitsu_id": "14015" - }, - "Persona 5 The Animation": { - "showId": "1084", - "kitsu_id": "13684" - }, - "Persona 5 The Animation - Dark Sun": { - "showId": "1084", - "kitsu_id": "41972" - }, - "Persona 5 The Animation - Stars and Ours": { - "showId": "1084", - "kitsu_id": "42090" - }, - "Nil Admirari no Tenbin - Teito Genwaku Kitan": { - "showId": "1085", - "kitsu_id": "12762" - }, - "Caligula": { - "showId": "1086", - "kitsu_id": "14019" - }, - "Cutie Honey Universe": { - "showId": "1087", - "kitsu_id": "14142" - }, - "Binan Koukou Chikyuu Bouei-bu Love! S3": { - "showId": "1088", - "kitsu_id": "41018" - }, - "Chi's Sweet Adventure S2": { - "showId": "1089", - "kitsu_id": "13906" - }, - "Golden Kamuy": { - "showId": "1090", - "kitsu_id": "13689" - }, - "Fumikiri Jikan": { - "showId": "1091", - "kitsu_id": "41086" - }, - "Rokuhoudou Yotsuiro Biyori": { - "showId": "1092", - "kitsu_id": "13932" - }, - "Last Period - Owarinaki Rasen no Monogatari": { - "showId": "1093", - "kitsu_id": "41131" - }, - "Butlers - Chitose Momotose Monogatari": { - "showId": "1094", - "kitsu_id": "14037" - }, - "Steins Gate 0": { - "showId": "1095", - "kitsu_id": "10788" - }, - "High School DxD Hero": { - "showId": "1096", - "kitsu_id": "12677" - }, - "Dorei-ku The Animation": { - "showId": "1097", - "kitsu_id": "40960" - }, - "Wotaku ni Koi wa Muzukashii": { - "showId": "1098", - "kitsu_id": "13660" - }, - "Isekai Izakaya - Koto Aitheria no Izakaya Nobu": { - "showId": "1099", - "kitsu_id": "13466" - }, - "Full Metal Panic! Invisible Victory": { - "showId": "1100", - "kitsu_id": "11460" - }, - "Cardfight!! Vanguard (2018)": { - "showId": "1101", - "kitsu_id": "41145" - }, - "To Be Heroine": { - "showId": "1102", - "kitsu_id": "40592" - }, - "Hanebado!": { - "showId": "1103", - "kitsu_id": "40576" - }, - "Island": { - "showId": "1104", - "kitsu_id": "11965" - }, - "One Room S2": { - "showId": "1105", - "kitsu_id": "13905" - }, - "Yama no Susume S3": { - "showId": "1106", - "kitsu_id": "13583" - }, - "Senjuushi": { - "showId": "1107", - "kitsu_id": "41119" - }, - "Aru Zombie Shoujo no Sainan": { - "showId": "1108", - "kitsu_id": "8018" - }, - "Chuukan Kanriroku Tonegawa": { - "showId": "1109", - "kitsu_id": "41023" - }, - "Isekai Maou to Shoukan Shoujo no Dorei Majutsu": { - "showId": "1110", - "kitsu_id": "41133" - }, - "Yume Oukoku to Nemureru 100-nin no Ouji-sama": { - "showId": "1111", - "kitsu_id": "41378" - }, - "Banana Fish": { - "showId": "1112", - "kitsu_id": "13988" - }, - "Shichisei no Subaru": { - "showId": "1113", - "kitsu_id": "40893" - }, - "Satsuriku no Tenshi": { - "showId": "1114", - "kitsu_id": "13715" - }, - "Harukana Receive": { - "showId": "1116", - "kitsu_id": "13659" - }, - "Chio-chan no Tsuugakuro": { - "showId": "1117", - "kitsu_id": "13592" - }, - "Hataraku Onii-san! No 2!": { - "showId": "1118", - "kitsu_id": "41376" - }, - "Ongaku Shoujo": { - "showId": "1119", - "kitsu_id": "41066" - }, - "Yami Shibai - Japanese Ghost Stories 6": { - "showId": "1121", - "kitsu_id": "41315" - }, - "Yakusoku no Nanaya Matsuri": { - "showId": "1122", - "kitsu_id": "41466" - }, - "Hataraku Saibou": { - "showId": "1123", - "kitsu_id": "14212" - }, - "Hyakuren no Haou to Seiyaku no Valkyria": { - "showId": "1124", - "kitsu_id": "41052" - }, - "Planet With": { - "showId": "1126", - "kitsu_id": "41093" - }, - "Asobi Asobase": { - "showId": "1127", - "kitsu_id": "41149" - }, - "Kyoto Teramachi Sanjou no Holmes": { - "showId": "1129", - "kitsu_id": "41381" - }, - "Phantom in the Twilight": { - "showId": "1130", - "kitsu_id": "41120" - }, - "Jashin-chan Dropkick": { - "showId": "1131", - "kitsu_id": "41165" - }, - "Overlord III": { - "showId": "1132", - "kitsu_id": "41174" - }, - "Angolmois - Genkou Kassenki": { - "showId": "1133", - "kitsu_id": "13614" - }, - "Shinya! Tensai Bakabon": { - "showId": "1134", - "kitsu_id": "41189" - }, - "Free! Dive to the Future": { - "showId": "1135", - "kitsu_id": "14010" - }, - "Lord of Vermilion - Guren no Ou": { - "showId": "1136", - "kitsu_id": "41121" - }, - "Happy Sugar Life": { - "showId": "1137", - "kitsu_id": "41097" - }, - "Grand Blue": { - "showId": "1138", - "kitsu_id": "14190" - }, - "Yuragi-sou no Yuuna-san": { - "showId": "1139", - "kitsu_id": "14090" - }, - "Shoujo Kageki Revue Starlight": { - "showId": "1140", - "kitsu_id": "14174" - }, - "Tsukumogami Kashimasu": { - "showId": "1142", - "kitsu_id": "13991" - }, - "Godzilla - Kessen Kidou Zoushoku Toshi": { - "showId": "1143", - "kitsu_id": "13297" - }, - "Muhyo to Rouji no Mahouritsu Soudan Jimusho": { - "showId": "1145", - "kitsu_id": "41076" - }, - "Shikioriori": { - "showId": "1146", - "kitsu_id": "41404" - }, - "Double Decker! Doug and Kirill": { - "showId": "1147", - "kitsu_id": "41075" - }, - "Bungou Stray Dogs - Dead Apple": { - "showId": "1148", - "kitsu_id": "13570" - }, - "One Piece - Episode of Skypiea": { - "showId": "1149", - "kitsu_id": "41303" - }, - "Frankenstein Family": { - "showId": "1150", - "kitsu_id": "13463" - }, - "RErideD - Tokigoe no Derrida": { - "showId": "1151", - "kitsu_id": "13613" - }, - "Tensei Shitara Slime Datta Ken OAD": { - "showId": "1152", - "kitsu_id": "42022" - }, - "Thunderbolt Fantasy - The Sword of Life and Death": { - "showId": "1153", - "kitsu_id": "40589" - }, - "Thunderbolt Fantasy S2": { - "showId": "1154", - "kitsu_id": "13609" - }, - "Akanesasu Shoujo": { - "showId": "1155", - "kitsu_id": "41943" - }, - "Uchuu Senkan Tiramisu S2": { - "showId": "1156", - "kitsu_id": "41926" - }, - "Ken En Ken - Aoki Kagayaki": { - "showId": "1157", - "kitsu_id": "41946" - }, - "Jingai-san no Yome": { - "showId": "1158", - "kitsu_id": "41951" - }, - "Kaze ga Tsuyoku Fuiteiru": { - "showId": "1159", - "kitsu_id": "41372" - }, - "Sora to Umi no Aida": { - "showId": "1160", - "kitsu_id": "40856" - }, - "Seishun Buta Yarou wa Bunny Girl Senpai no Yume wo Minai": { - "showId": "1161", - "kitsu_id": "41056" - }, - "Zombieland Saga": { - "showId": "1162", - "kitsu_id": "41459" - }, - "Bakumatsu": { - "showId": "1163", - "kitsu_id": "41112" - }, - "Tonari no Kyuuketsuki-san": { - "showId": "1164", - "kitsu_id": "41111" - }, - "Yagate Kimi ni Naru": { - "showId": "1165", - "kitsu_id": "41240" - }, - "Hinomaru Sumo": { - "showId": "1166", - "kitsu_id": "41148" - }, - "Uchi no Maid ga Uzasugiru!": { - "showId": "1167", - "kitsu_id": "41209" - }, - "Dakaretai Otoko 1-i ni Odosarete Imasu.": { - "showId": "1168", - "kitsu_id": "41151" - }, - "JoJo's Bizarre Adventure - Golden Wind": { - "showId": "1169", - "kitsu_id": "41410" - }, - "Kishuku Gakkou no Juliet": { - "showId": "1170", - "kitsu_id": "41065" - }, - "Irozuku Sekai no Ashita kara": { - "showId": "1171", - "kitsu_id": "41101" - }, - "Gakuen Basara": { - "showId": "1172", - "kitsu_id": "41263" - }, - "Ace Attorney S2": { - "showId": "1173", - "kitsu_id": "41069" - }, - "Radiant": { - "showId": "1174", - "kitsu_id": "41099" - }, - "Goblin Slayer": { - "showId": "1175", - "kitsu_id": "40597" - }, - "Sword Art Online - Alicization": { - "showId": "1176", - "kitsu_id": "13893" - }, - "SSSS.Gridman": { - "showId": "1177", - "kitsu_id": "13601" - }, - "Release the Spyce": { - "showId": "1178", - "kitsu_id": "41405" - }, - "Fairy Tail Final Season": { - "showId": "1179", - "kitsu_id": "13658" - }, - "Ulysses - Jeanne d'Arc to Renkin no Kishi": { - "showId": "1180", - "kitsu_id": "13994" - }, - "Anima Yell!": { - "showId": "1181", - "kitsu_id": "41423" - }, - "Himote House": { - "showId": "1182", - "kitsu_id": "41961" - }, - "Gaikotsu Shoten'in Honda-san": { - "showId": "1183", - "kitsu_id": "13821" - }, - "The iDOLM@STER Side M - Wake Atte Mini!": { - "showId": "1184", - "kitsu_id": "41954" - }, - "Ore ga Suki nano wa Imouto dakedo Imouto ja Nai": { - "showId": "1185", - "kitsu_id": "41938" - }, - "Conception": { - "showId": "1186", - "kitsu_id": "41269" - }, - "Merc Storia - Mukiryoku Shounen to Bin no Naka no Shoujo": { - "showId": "1187", - "kitsu_id": "41965" - }, - "Karakuri Circus": { - "showId": "1188", - "kitsu_id": "41053" - }, - "Toaru Majutsu no Index III": { - "showId": "1189", - "kitsu_id": "13880" - }, - "Beelzebub-jou no Okinimesu mama.": { - "showId": "1190", - "kitsu_id": "41218" - }, - "Senran Kagura Shinovi Master - Tokyo Youma-hen": { - "showId": "1191", - "kitsu_id": "13690" - }, - "Tsurune": { - "showId": "1192", - "kitsu_id": "13990" - }, - "Kitsune no Koe": { - "showId": "1193", - "kitsu_id": "41942" - }, - "Castlevania S2": { - "showId": "1194", - "kitsu_id": "13627" - }, - "Saint Seiya - Saintia Shou": { - "showId": "1195", - "kitsu_id": "40611" - }, - "Lord El-Melloi II Case Files": { - "showId": "1197", - "kitsu_id": "42092" - }, - "BanG Dream! S2": { - "showId": "1198", - "kitsu_id": "41289" - }, - "Boogiepop wa Warawanai (2019)": { - "showId": "1199", - "kitsu_id": "41032" - }, - "Egao no Daika": { - "showId": "1200", - "kitsu_id": "42001" - }, - "Fukigen na Mononokean S2": { - "showId": "1201", - "kitsu_id": "42002" - }, - "W'z": { - "showId": "1202", - "kitsu_id": "41077" - }, - "Mini Toji": { - "showId": "1203", - "kitsu_id": "42008" - }, - "Tate no Yuusha no Nariagari": { - "showId": "1204", - "kitsu_id": "13593" - }, - "Ueno-san wa Bukiyou": { - "showId": "1205", - "kitsu_id": "41342" - }, - "Mob Psycho 100 S2": { - "showId": "1206", - "kitsu_id": "41071" - }, - "Pastel Memories": { - "showId": "1207", - "kitsu_id": "41430" - }, - "Dororo": { - "showId": "1208", - "kitsu_id": "41083" - }, - "Ame-iro Cocoa - Side G": { - "showId": "1209", - "kitsu_id": "42109" - }, - "Rinshi!! Ekoda-chan": { - "showId": "1210", - "kitsu_id": "42018" - }, - "Watashi ni Tenshi ga Maiorita!": { - "showId": "1211", - "kitsu_id": "41403" - }, - "Meiji Tokyo Renka": { - "showId": "1212", - "kitsu_id": "13056" - }, - "Doukyonin wa Hiza, Tokidoki, Atama no Ue": { - "showId": "1213", - "kitsu_id": "42000" - }, - "Kemurikusa": { - "showId": "1214", - "kitsu_id": "41408" - }, - "Yakusoku no Neverland": { - "showId": "1215", - "kitsu_id": "41312" - }, - "Go-toubun no Hanayome": { - "showId": "1217", - "kitsu_id": "41966" - }, - "Girly Air Force": { - "showId": "1218", - "kitsu_id": "41375" - }, - "Dimension High School": { - "showId": "1219", - "kitsu_id": "41999" - }, - "Date A Live S3": { - "showId": "1220", - "imdb_id": "tt2575684" - }, - "B-Project S2": { - "showId": "1221", - "kitsu_id": "41992" - }, - "Mahou Shoujo Tokushusen Asuka": { - "showId": "1222", - "kitsu_id": "41490" - }, - "Grimms Notes The Animation": { - "showId": "1223", - "kitsu_id": "42004" - }, - "Domestic na Kanojo": { - "showId": "1224", - "kitsu_id": "41479" - }, - "Bermuda Triangle - Colorful Pastrale": { - "showId": "1225", - "kitsu_id": "41958" - }, - "Kaguya-sama wa Kokurasetai": { - "showId": "1226", - "kitsu_id": "41373" - }, - "Endro": { - "showId": "1227", - "kitsu_id": "41957" - }, - "Kouya no Kotobuki Hikoutai": { - "showId": "1228", - "kitsu_id": "41959" - }, - "Kemono Friends S2": { - "showId": "1229", - "kitsu_id": "13621" - }, - "Virtual-san wa Miteiru": { - "showId": "1230", - "kitsu_id": "42042" - }, - "Manaria Friends": { - "showId": "1231", - "kitsu_id": "11354" - }, - "Ace of Diamond Act II": { - "showId": "1233", - "kitsu_id": "42160" - }, - "Kono Yo no Hate de Koi wo Utau Shoujo YU-NO": { - "showId": "1234", - "kitsu_id": "13469" - }, - "Bakumatsu Crisis": { - "showId": "1235", - "kitsu_id": "42161" - }, - "Fruits Basket (2019)": { - "showId": "1236", - "kitsu_id": "41995" - }, - "Senryuu Shoujo": { - "showId": "1237", - "kitsu_id": "42070" - }, - "Midara na Ao-chan wa Benkyou ga Dekinai": { - "showId": "1238", - "kitsu_id": "42024" - }, - "Hitoribocchi no Marumaru Seikatsu": { - "showId": "1239", - "kitsu_id": "41124" - }, - "Mix - Meisei Story": { - "showId": "1240", - "kitsu_id": "41925" - }, - "Amazing Stranger": { - "showId": "1241", - "kitsu_id": "42228" - }, - "Joshikausei": { - "showId": "1242", - "kitsu_id": "41941" - }, - "Nobunaga-sensei no Osanazuma": { - "showId": "1243", - "kitsu_id": "42093" - }, - "Kimetsu no Yaiba": { - "showId": "1244", - "kitsu_id": "41370" - }, - "Bokutachi wa Benkyou ga Dekinai": { - "showId": "1245", - "kitsu_id": "41956" - }, - "Kono Oto Tomare!": { - "showId": "1246", - "kitsu_id": "42101" - }, - "Nande Koko ni Sensei ga": { - "showId": "1247", - "kitsu_id": "42060" - }, - "Hachigatsu no Cinderella Nine": { - "showId": "1248", - "kitsu_id": "42144" - }, - "Mayonaka no Occult Koumuin": { - "showId": "1249", - "kitsu_id": "41465" - }, - "Fairy Gone": { - "showId": "1250", - "kitsu_id": [ - "42130", - "42358" - ] - }, - "Shoumetsu Toshi": { - "showId": "1251", - "kitsu_id": "41451" - }, - "RobiHachi": { - "showId": "1252", - "kitsu_id": "42226" - }, - "Namu Amida Butsu! - Rendai Utena": { - "showId": "1253", - "kitsu_id": "42214" - }, - "Yatogame-chan Kansatsu Nikki": { - "showId": "1254", - "kitsu_id": "42084" - }, - "Isekai Quartet": { - "showId": "1255", - "kitsu_id": "42032" - }, - "Strike Witches - 501-butai Hasshin Shimasu!": { - "showId": "1256", - "kitsu_id": "42074" - }, - "One Punch Man S2": { - "showId": "1257", - "kitsu_id": "12566" - }, - "Kenja no Mago": { - "showId": "1258", - "kitsu_id": "40944" - }, - "Sewayaki Kitsune no Senko-san": { - "showId": "1259", - "kitsu_id": "42026" - }, - "Sarazanmai": { - "showId": "1260", - "kitsu_id": "41017" - }, - "King of Prism - Shiny Seven Stars": { - "showId": "1261", - "kitsu_id": "42278" - }, - "Cardfight!! Vanguard - Zoku Koukousei-hen": { - "showId": "1262", - "kitsu_id": "42325" - }, - "High School Star Musical S3": { - "showId": "1263", - "kitsu_id": "40964" - }, - "Katsute Kami Datta Kemono-tachi e": { - "showId": "1264", - "kitsu_id": "42268" - }, - "Tejina-senpai": { - "showId": "1265", - "kitsu_id": "42082" - }, - "Sounan desu ka": { - "showId": "1266", - "kitsu_id": "42171" - }, - "Kanata no Astra": { - "showId": "1267", - "kitsu_id": "42148" - }, - "Dumbbell Nan Kilo Moteru": { - "showId": "1268", - "kitsu_id": "42134" - }, - "Maou-sama, Retry!": { - "showId": "1269", - "kitsu_id": "41950" - }, - "UchiMusume": { - "showId": "1270", - "imdb_id": "tt10347622" - }, - "Araburu Kisetsu no Otome-domo yo.": { - "showId": "1271", - "kitsu_id": "42025" - }, - "Joshikousei no Mudazukai": { - "showId": "1272", - "kitsu_id": "42221" - }, - "Dr. Stone": { - "showId": "1273", - "kitsu_id": "42080" - }, - "Enen no Shouboutai": { - "showId": "1274", - "kitsu_id": "42068" - }, - "Granbelm": { - "showId": "1275", - "kitsu_id": "42159" - }, - "Symphogear XV": { - "showId": "1276", - "kitsu_id": "11884" - }, - "Ensemble Stars!": { - "showId": "1277", - "kitsu_id": "11595" - }, - "Nakanohito Genome [Jikkyouchuu]": { - "showId": "1278", - "kitsu_id": "41336" - }, - "Re Stage! Dream Days": { - "showId": "1279", - "kitsu_id": "42280" - }, - "Yami Shibai - Japanese Ghost Stories 7": { - "showId": "1280", - "kitsu_id": "42359" - }, - "DanMachi S2": { - "showId": "1281", - "kitsu_id": "40599" - }, - "Hakata Mentai! Pirikarako-chan": { - "showId": "1282", - "kitsu_id": "42369" - }, - "HenSuki": { - "showId": "1283", - "kitsu_id": "42451" - }, - "Kochoki - Wakaki Nobunaga": { - "showId": "1284", - "kitsu_id": "42182" - }, - "Arifureta Shokugyou de Sekai Saikyou": { - "showId": "1285", - "kitsu_id": "14043" - }, - "Cop Craft": { - "showId": "1286", - "kitsu_id": "42174" - }, - "Vinland Saga": { - "showId": "1287", - "kitsu_id": "41084" - }, - "Isekai Cheat Magician": { - "showId": "1290", - "kitsu_id": "42319" - }, - "Given": { - "showId": "1291", - "kitsu_id": "42379" - }, - "Machikado Mazoku": { - "showId": "1292", - "kitsu_id": "42137" - }, - "Toaru Kagaku no Accelerator": { - "showId": "1293", - "kitsu_id": "41980" - }, - "Okaa-san Online": { - "showId": "1294", - "kitsu_id": "5114" - }, - "Bem": { - "showId": "1295", - "kitsu_id": "42175" - }, - "Try Knights": { - "showId": "1296", - "kitsu_id": "42281" - }, - "Fate Grand Order - Absolute Demonic Front Babylonia": { - "showId": "1297", - "kitsu_id": "42269" - }, - "Youjo Senki Movie": { - "showId": "1299", - "kitsu_id": "14173" - }, - "Bananya S2": { - "showId": "1300", - "kitsu_id": "42486" - }, - "Ahiru no Sora": { - "showId": "1301", - "kitsu_id": "41399" - }, - "Radiant S2": { - "showId": "1302", - "kitsu_id": "42521" - }, - "Urashimasakatasen no Nichijou": { - "showId": "1303", - "kitsu_id": "42546" - }, - "Hataage! Kemono Michi": { - "showId": "1304", - "kitsu_id": "42127" - }, - "Shinchou Yuusha": { - "showId": "1305", - "kitsu_id": "42079" - }, - "Honzuki no Gekokujou": { - "showId": "1306", - "kitsu_id": "42241" - }, - "Ore wo Suki nano wa Omae dake ka yo": { - "showId": "1307", - "kitsu_id": "42047" - }, - "Houkago Saikoro Club": { - "showId": "1308", - "kitsu_id": "42345" - }, - "Choyoyu": { - "showId": "1309", - "imdb_id": "tt10671282" - }, - "Azur Lane": { - "showId": "1310", - "kitsu_id": "42420" - }, - "Chuubyou Gekihatsu Boy": { - "showId": "1311", - "kitsu_id": "42120" - }, - "Null Peta": { - "showId": "1312", - "kitsu_id": "42469" - }, - "Granblue Fantasy The Animation S2": { - "showId": "1313", - "kitsu_id": "14132" - }, - "BLACKFOX": { - "showId": "1314", - "kitsu_id": "41102" - }, - "Mairimashita! Iruma-kun": { - "showId": "1315", - "kitsu_id": "42310" - }, - "Val x Love": { - "showId": "1316", - "kitsu_id": "42344" - }, - "Bokutachi wa Benkyou ga Dekinai S2": { - "showId": "1317", - "kitsu_id": "42414" - }, - "Actors - Songs Connection": { - "showId": "1320", - "kitsu_id": "42308" - }, - "Babylon": { - "showId": "1321", - "kitsu_id": "41085" - }, - "Africa no Salaryman": { - "showId": "1322", - "kitsu_id": "42550" - }, - "Special 7 - Special Crime Investigation Unit": { - "showId": "1323", - "kitsu_id": "42272" - }, - "Watashi, Nouryoku wa Heikinchi de tte Itta yo ne!": { - "showId": "1324", - "kitsu_id": "42423" - }, - "Stand My Heroes - Piece of Truth": { - "showId": "1325", - "kitsu_id": "42309" - }, - "Phantasy Star Online 2 - Episode Oracle": { - "showId": "1326", - "kitsu_id": "42548" - }, - "Kandagawa Jet Girls": { - "showId": "1327", - "kitsu_id": "42476" - }, - "ZX - Code Reunion": { - "showId": "1328", - "kitsu_id": "42307" - }, - "Mugen no Juunin - Immortal": { - "showId": "1329", - "kitsu_id": "42346" - }, - "Hoshiai no Sora": { - "showId": "1330", - "kitsu_id": "42094" - }, - "No Guns Life": { - "showId": "1331", - "kitsu_id": "42197" - }, - "Assassins Pride": { - "showId": "1332", - "kitsu_id": "42328" - }, - "Gundam Build Divers Re-RISE": { - "showId": "1333", - "kitsu_id": "42585" - }, - "Shokugeki no Soma S4": { - "showId": "1334", - "kitsu_id": "42390" - }, - "Shin Chuuka Ichiban!": { - "showId": "1335", - "kitsu_id": "42549" - }, - "Kabukicho Sherlock": { - "showId": "1336", - "kitsu_id": "41939" - }, - "Sword Art Online - Alicization - War of Underworld": { - "showId": "1337", - "kitsu_id": "42213" - }, - "Rifle is Beautiful": { - "showId": "1338", - "kitsu_id": "42292" - }, - "Chihayafuru S3": { - "showId": "1339", - "kitsu_id": "40998" - }, - "PSYCHO-PASS 3": { - "showId": "1340", - "kitsu_id": "42183" - }, - "Mahouka Koukou no Rettousei Movie - Hoshi wo Yobu Shoujo": { - "showId": "1341", - "kitsu_id": "11931" - }, - "Thunderbolt Fantasy - Bewitching Melody of the West": { - "showId": "1342" - }, - "A3! Season Spring & Summer": { - "showId": "1378", - "kitsu_id": "42146" - }, - "ARP Backstage Pass": { - "showId": "1379", - "kitsu_id": "42879" - }, - "BanG Dream! S3": { - "showId": "1354", - "kitsu_id": "41290" - }, - "Boku no Tonari ni Ankoku Hakaishin ga Imasu": { - "showId": "1374", - "kitsu_id": "42100" - }, - "Darwin's Game": { - "showId": "1344", - "kitsu_id": "42260" - }, - "Eizouken ni wa Te wo Dasu na!": { - "showId": "1347", - "kitsu_id": "42343" - }, - "Haikyuu!! Riku vs Kuu": { - "showId": "1372", - "kitsu_id": "42502" - }, - "Haikyuu!! S4": { - "showId": "1369", - "kitsu_id": "42059" - }, - "Hatena Illusion": { - "showId": "1360", - "kitsu_id": "13704" - }, - "Heya Camp": { - "showId": "1351", - "kitsu_id": "41978" - }, - "Housekishou Richard-shi no Nazo Kantei": { - "showId": "1366", - "kitsu_id": "42488" - }, - "ID INVADED": { - "showId": "1348", - "kitsu_id": "42436" - }, - "Infinite Dendrogram": { - "showId": "1362", - "kitsu_id": "42131" - }, - "Isekai Quartet S2": { - "showId": "1380", - "kitsu_id": "42410" - }, - "Ishuzoku Reviewers": { - "showId": "1375", - "kitsu_id": "42744" - }, - "Itai no wa Iya nano de Bougyoryoku ni Kyokufuri Shitai to Omoimasu": { - "showId": "1357", - "kitsu_id": "42043" - }, - "Jibaku Shounen Hanako-kun": { - "showId": "1365", - "kitsu_id": "42322" - }, - "Koisuru Asteroid": { - "showId": "1345", - "kitsu_id": "42470" - }, - "Kyochuu Rettou Movie": { - "showId": "1371", - "kitsu_id": "42941" - }, - "Kyokou Suiri": { - "showId": "1377", - "kitsu_id": "42117" - }, - "Magia Record": { - "showId": "1346", - "kitsu_id": "42016" - }, - "Majutsushi Orphen Hagure Tabi": { - "showId": "1355", - "kitsu_id": "42329" - }, - "Murenase! Seton Gakuen": { - "showId": "1352", - "kitsu_id": "42601" - }, - "Nanabun no Nijyuuni": { - "showId": "1376", - "kitsu_id": "42456" - }, - "Nekopara": { - "showId": "1359", - "kitsu_id": "13121" - }, - "number24": { - "showId": "1356", - "kitsu_id": "42209" - }, - "Oda Cinnamon Nobunaga": { - "showId": "1373", - "kitsu_id": "42911" - }, - "Oshi ga Budoukan Ittekuretara Shinu": { - "showId": "1363", - "kitsu_id": "41309" - }, - "Pet": { - "showId": "1350", - "kitsu_id": "41089" - }, - "Plunderer": { - "showId": "1358", - "kitsu_id": "40600" - }, - "Re Zero kara Hajimeru Isekai Seikatsu - Director's Cut": { - "showId": "660", - "kitsu_id": "42903" - }, - "Rikei ga Koi ni Ochita no de Shoumei shitemita": { - "showId": "1368", - "kitsu_id": "42297" - }, - "Runway de Waratte": { - "showId": "1370", - "kitsu_id": "42552" - }, - "Show By Rock!! Mashumairesh!!": { - "showId": "1361", - "kitsu_id": "42885" - }, - "Somali to Mori no Kamisama": { - "showId": "1349", - "kitsu_id": "42201" - }, - "Toaru Kagaku no Railgun T": { - "showId": "1367", - "kitsu_id": "41979" - }, - "Uchi Tama - Uchi no Tama Shirimasen ka": { - "showId": "1364", - "kitsu_id": "42397" - }, - "Yatogame-chan Kansatsu Nikki S2": { - "showId": "1353", - "kitsu_id": "42398" - }, - "K - Seven Stories": { - "showId": "1381", - "kitsu_id": [ - "12116", - "41770", - "41772", - "41767", - "41768", - "41771" - ] - }, - "Kono Subarashii Sekai ni Shukufuku wo! Movie": { - "showId": "1382", - "kitsu_id": "41440" - }, - "PSYCHO-PASS 3 - First Inspector": { - "showId": "1383", - "kitsu_id": "42936" - }, - "Bungo to Alchemist - Shinpan no Haguruma": { - "showId": "1390", - "kitsu_id": "43062" - }, - "Hachi-nan tte, Sore wa Nai deshou!": { - "showId": "1386", - "kitsu_id": "43059" - }, - "Kakushigoto": { - "showId": "1387", - "kitsu_id": "42722" - }, - "Listeners": { - "showId": "1389", - "kitsu_id": "42391" - }, - "Nami yo Kiitekure": { - "showId": "1388", - "kitsu_id": "42614" - }, - "Tamayomi": { - "showId": "1384", - "kitsu_id": "42404" - }, - "Tower of God": { - "showId": "1385", - "kitsu_id": "43004" - }, - "Arte": { - "showId": "1393", - "kitsu_id": "42479" - }, - "Digimon Adventure (2020)": { - "showId": "1397", - "kitsu_id": "42954" - }, - "Sakura Wars the Animation": { - "showId": "1391", - "kitsu_id": "42966" - }, - "Yesterday wo Utatte": { - "showId": "1396", - "kitsu_id": "43063" - }, - "Gal to Kyouryuu": { - "showId": "1394", - "kitsu_id": "42532" - }, - "Gleipnir": { - "showId": "1401", - "kitsu_id": "42173" - }, - "IDOLiSH7 S2": { - "showId": "1398", - "kitsu_id": "42453" - }, - "Kingdom S3": { - "showId": "1402", - "kitsu_id": "43037" - }, - "Shachou, Battle no Jikan desu!": { - "showId": "1400", - "kitsu_id": "42850" - }, - "Tsugumomo S2": { - "showId": "1399", - "kitsu_id": "42180" - }, - "Fruits Basket S2 (2019)": { - "showId": "1406", - "kitsu_id": "42554" - }, - "Houkago Teibou Nisshi": { - "showId": "1407", - "kitsu_id": "42296" - }, - "Jashin-chan Dropkick S2": { - "showId": "1404", - "kitsu_id": "42126" - }, - "Princess Connect! Re Dive": { - "showId": "1405", - "kitsu_id": "42892" - }, - "Shadowverse": { - "showId": "1408", - "kitsu_id": "42613" - }, - "Shironeko Project - Zero Chronicle": { - "showId": "1403", - "kitsu_id": "43084" - }, - "Appare-Ranman!": { - "showId": "1410", - "kitsu_id": "42622" - }, - "Fugou Keiji Balance - UNLIMITED": { - "showId": "1409", - "kitsu_id": "43056" - }, - "Hamefura": { - "showId": "1395", - "kitsu_id": "42277" - }, - "Kaguya-sama wa Kokurasetai S2": { - "showId": "1413", - "kitsu_id": "42632" - }, - "Major 2nd S2": { - "showId": "1392", - "kitsu_id": "43109" - }, - "Shokugeki no Soma S5": { - "showId": "1411", - "kitsu_id": "42921" - }, - "Zashiki Warashi no Tatami-chan": { - "showId": "1412", - "kitsu_id": "43115" - }, - "Woodpecker Detective's Office": { - "showId": "1414", - "kitsu_id": "42602" - }, - "Kitsutsuki Tanteidokoro": { - "showId": "1415", - "kitsu_id": "42602" - }, - "Enen no Shouboutai S2": { - "showId": "1416", - "kitsu_id": "42909" - }, - "Dokyuu Hentai HxEros": { - "showId": "1417", - "kitsu_id": "42657" - }, - "Healin Good Precure": { - "showId": "1418", - "kitsu_id": "42650" - }, - "Maou Gakuin no Futekigousha": { - "showId": "1419", - "kitsu_id": "43005" - }, - "Lapis ReLiGHTs": { - "showId": "1420", - "kitsu_id": "41115" - }, - "The God of High School": { - "showId": "1421", - "kitsu_id": "43018" - }, - "Umayon": { - "showId": "1422", - "kitsu_id": "42034" - }, - "Deca-Dence": { - "showId": "1423", - "kitsu_id": "42433" - }, - "Uzaki-chan wa Asobitai!": { - "showId": "1424", - "kitsu_id": "43094" - }, - "Yahari Ore no Seishun Love Come wa Machigatteiru Kan": { - "showId": "1425", - "kitsu_id": "42194" - }, - "Peter Grill to Kenja no Jikan": { - "showId": "1426", - "kitsu_id": "42563" - }, - "Kanojo, Okarishimasu": { - "showId": "1427", - "kitsu_id": "43028" - }, - "Monster Musume no Oisha-san": { - "showId": "1428", - "kitsu_id": "42724" - }, - "Ninja Collection": { - "showId": "1429", - "kitsu_id": "43236" - }, - "Gibiate": { - "showId": "1430", - "kitsu_id": "43124" - }, - "Koi to Producer - Evol x Love": { - "showId": "1431", - "kitsu_id": "43240" - }, - "Re Zero kara Hajimeru Isekai Seikatsu - Memory Snow": { - "showId": "1432", - "kitsu_id": "13882" - }, - "Re Zero kara Hajimeru Isekai Seikatsu - Hyouketsu no Kizuna": { - "showId": "1433", - "kitsu_id": "42006" - }, - "Goblin Slayer - Goblin's Crown": { - "showId": "1434", - "kitsu_id": "42204" - }, - "Boku no Hero Academia - Ikinokore! Kesshi no Survival Kunren": { - "showId": "1435", - "kitsu_id": "43485" - } -} \ No newline at end of file diff --git a/scraper/scrapers/horriblesubs/horriblesubs_scraper.js b/scraper/scrapers/horriblesubs/horriblesubs_scraper.js deleted file mode 100644 index 91d9a81..0000000 --- a/scraper/scrapers/horriblesubs/horriblesubs_scraper.js +++ /dev/null @@ -1,186 +0,0 @@ -const fs = require('fs'); -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const decode = require('magnet-uri'); -const horriblesubs = require('./horriblesubs_api.js'); -const repository = require('../../lib/repository'); -const { Type } = require('../../lib/types'); -const { updateCurrentSeeders, updateTorrentSize } = require('../../lib/torrent'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); -const { getMetadata, getKitsuId } = require('../../lib/metadata'); -const showMappings = require('./horriblesubs_mapping.json'); - -const NAME = 'HorribleSubs'; -const NEXT_FULL_SCRAPE_OFFSET = 5 * 24 * 60 * 60; // 5 days; - -const limiter = new Bottleneck({ maxConcurrent: 5 }); -const entryLimiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - const lastScraped = lastScrape.lastScraped && moment(lastScrape.lastScraped); - - if (!lastScraped || lastScraped.add(NEXT_FULL_SCRAPE_OFFSET, 'seconds') < scrapeStart) { - console.log(`[${scrapeStart}] scrapping all ${NAME} shows...`); - return _scrapeAllShows() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished scrapping all ${NAME} shows`)); - } else { - console.log(`[${scrapeStart}] scrapping latest ${NAME} entries...`); - return _scrapeLatestEntries() - .then(() => console.log(`[${moment()}] finished scrapping latest ${NAME} entries`)); - } -} - -async function updateSeeders(torrent) { - return Promise.resolve([]); -} - -async function _scrapeLatestEntries() { - const latestEntries = await horriblesubs.getLatestEntries(); - - return Promise.all(latestEntries - .map((entryData) => limiter.schedule(() => _parseShowData(entryData) - .catch((err) => console.log(err))))); -} - -async function _scrapeAllShows() { - const shows = await horriblesubs.allShows(); - - return Promise.all(shows - .map((show) => limiter.schedule(() => horriblesubs.showData(show) - .then((showData) => _parseShowData(showData, false)) - .catch((err) => console.log(err))))); -} - -async function compareSearchKitsuIds() { - console.log(`${NAME}: initiating kitsu compare...`); - const shows = await horriblesubs.allShows() - .then((shows) => Promise.all(shows.slice(0, 1).map((show) => limiter.schedule(() => enrichShow(show))))); - - const incorrect = shows.filter( - (show) => showMappings[show.title] && showMappings[show.title].kitsu_id !== show.kitsu_id); - const incorrectRatio = incorrect.length / shows.length; - console.log(incorrect); - console.log(`Ratio: ${incorrectRatio}`); -} - -async function initMapping() { - console.log(`${NAME}: initiating kitsu mapping...`); - const shows = await horriblesubs.allShows() - .then((shows) => shows.filter((show) => !showMappings[show.title])) - .then((shows) => Promise.all(shows.map((show) => limiter.schedule(() => enrichShow(show))))) - .then((shows) => shows.reduce((map, show) => (map[show.title] = show, map), showMappings)); - - fs.writeFile( - "./scraper/scrapers/horriblesubs/horriblesubs_mapping.json", - JSON.stringify(shows), 'utf8', - (err) => { - if (err) { - console.log("An error occurred while writing JSON Object to File.", err); - } else { - console.log(`${NAME}: finished kitsu mapping`); - } - } - ); -} - -async function enrichShow(show) { - console.log(`${NAME}: getting show info for ${show.title}...`); - const showId = await horriblesubs._getShowId(show.url) - .catch(() => show.title); - const metadata = await getKitsuId({ title: show.title }) - .then((kitsuId) => getMetadata(kitsuId)) - .catch((error) => { - console.log(`Failed getting kitsu meta: ${error.message}`); - return {}; - }); - - return { - showId: showId, - kitsu_id: metadata.kitsuId, - ...show, - kitsuTitle: metadata.title, - imdb_id: metadata.imdbId - } -} - -async function _parseShowData(showData, updateSeeders = true) { - console.log(`${NAME}: scrapping ${showData.title} data...`); - const showMapping = showMappings[showData.title]; - const kitsuId = showMapping && showMapping.kitsu_id; - if (!showMapping) { - throw new Error(`No kitsu mapping found for ${showData.title}`); - } - if (!kitsuId) { - throw new Error(`No kitsuId found for ${showData.title}`); - } - - // sometimes horriblesubs entry contains multiple season in it, so need to split it per kitsu season entry - const kitsuIdsMapping = Array.isArray(kitsuId) && await Promise.all(kitsuId.map(kitsuId => getMetadata(kitsuId))) - .then((metas) => metas.reduce((map, meta) => { - const epOffset = Object.keys(map).length; - [...Array(meta.totalCount || 1).keys()] - .map(ep => ep + 1) - .forEach(ep => map[ep + epOffset] = { kitsuId: meta.kitsuId, episode: ep, title: meta.title }); - return map; - }, {})) || {}; - const formatTitle = (episodeInfo, mirror) => { - const mapping = kitsuIdsMapping[episodeInfo.episode.replace(/^0+/, '')]; - if (mapping) { - return `${mapping.title} - ${mapping.episode} [${mirror.resolution}]`; - } - return `${episodeInfo.title} - ${episodeInfo.episode} [${mirror.resolution}]`; - }; - const getKitsuId = inputEpisode => { - const episodeString = inputEpisode.includes('-') && inputEpisode.split('-')[0] || inputEpisode; - const episode = parseInt(episodeString, 10); - if (kitsuIdsMapping[episode]) { - return kitsuIdsMapping[episode].kitsuId; - } else if (Array.isArray(kitsuId)) { - console.warn(`Unmapped episode number for ${showData.title} - ${inputEpisode}`); - return undefined; - } - return kitsuId; - }; - - return Promise.all([].concat(showData.singleEpisodes || []).concat(showData.packEpisodes || []) - .map(episodeInfo => episodeInfo.mirrors - .filter(mirror => mirror.magnetLink && mirror.magnetLink.length) - .map(mirror => ({ - provider: NAME, - ...mirror, - infoHash: decode(mirror.magnetLink).infoHash, - trackers: decode(mirror.magnetLink).tr.join(','), - title: formatTitle(episodeInfo, mirror), - type: Type.ANIME, - kitsuId: getKitsuId(episodeInfo.episode), - uploadDate: episodeInfo.uploadDate, - }))) - .reduce((a, b) => a.concat(b), []) - .filter(torrent => torrent.kitsuId) - .map(torrent => entryLimiter.schedule(() => processTorrentRecord(torrent, updateSeeders)))) - .then(() => console.log(`${NAME}: finished scrapping ${showData.title} data`)); -} - -async function processTorrentRecord(torrent, updateSeeders = true) { - const existingTorrent = await repository.getTorrent(torrent).catch(() => undefined); - - if (existingTorrent && existingTorrent.provider === NAME) { - if (updateSeeders) { - return updateCurrentSeeders(torrent).then(updatedSeeders => checkAndUpdateTorrent(updatedSeeders)) - } - return Promise.resolve(torrent) - } - - return updateTorrentSize(torrent) - .then(updated => updateCurrentSeeders(updated)) - .then(updated => createTorrentEntry(updated, true)) - .catch(error => console.warn(`Failed creating entry for ${torrent.title}:`, error)); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/kickass/kickass_api.js b/scraper/scrapers/kickass/kickass_api.js deleted file mode 100644 index 43fb061..0000000 --- a/scraper/scrapers/kickass/kickass_api.js +++ /dev/null @@ -1,161 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const decode = require('magnet-uri'); -const Promises = require('../../lib/promises'); -const { parseSize } = require("../scraperHelper"); - -const defaultProxies = [ - 'https://katcr.co' -]; -const defaultTimeout = 10000; - -const Categories = { - MOVIE: 'movies', - TV: 'tv', - ANIME: 'anime', - APPS: 'applications', - GAMES: 'games', - MUSIC: 'music', - BOOKS: 'books', - PORN: 'xxx', - OTHER: 'other', -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - const proxyList = config.proxyList || defaultProxies; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/torrent/${torrentId}`, config))) - .then((body) => parseTorrentPage(body)) - .then((torrent) => ({ torrentId, ...torrent })) - .catch((err) => torrent(torrentId, config, retries - 1)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/search/${keyword}/${page}/99/${category}`, config))) - .then((body) => parseTableBody(body)) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/category/${category}/page/${page}`, config))) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { timeout: timeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('Access Denied')) { - console.log(`Access Denied: ${requestUrl}`); - throw new Error(`Access Denied: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden') || - body.includes('Origin DNS error') || - !body.includes('Kickass Torrents')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('.table > tbody > tr').each((i, element) => { - const row = $(element); - const magnetLink = row.find('a[title="Torrent magnet link"]').attr('href'); - torrents.push({ - name: row.find('a[class="torrents_table__torrent_title"]').first().children('b').text(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - torrentId: row.find('a[class="torrents_table__torrent_title"]').first().attr('href').replace('/torrent/', ''), - category: row.find('span[class="torrents_table__upload_info"]').first().children('a').first().attr('href') - .match(/category\/([^\/]+)/)[1], - seeders: parseInt(row.find('td[data-title="Seed"]').first().text()), - leechers: parseInt(row.find('td[data-title="Leech"]').first().text()), - size: parseSize(row.find('td[data-title="Size"]').first().text()), - uploadDate: moment(row.find('td[data-title="Age"]').first().attr('title')).toDate() - }); - }); - - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const content = $('div[class="col"]').first(); - const info = content.find('div[class="torrent_stats"]').parent(); - const description = content.find('div[id="main"]'); - const magnetLink = info.find('a[title="Download verified Magnet"]').attr('href'); - const imdbIdMatch = description.html().match(/imdb\.com\/title\/(tt\d+)/i); - - const torrent = { - name: info.find('h1').first().text(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - seeders: parseInt(info.find('span[class="torrent_stats__seed_count mr-2"]').first().text().match(/\d+/)[0], 10), - leechers: parseInt(info.find('span[class="torrent_stats__leech_count mr-2"]').first().text().match(/\d+/)[0], 10), - category: info.find('small').first().children('a').first().attr('href').match(/\/category\/([^\/]+)/)[1], - languages: description.find('span:contains(\'Audio\')').next().children().eq(0).text(), - size: parseSize(description.find('ul[class="file_list"]').first().find('li').first().contents().eq(2).text() - .match(/\(Size: (.+)\)/)[1]), - uploadDate: moment(info.find('time').first().text()).toDate(), - imdbId: imdbIdMatch && imdbIdMatch[1], - files: content.find('ul[class="file_list"]').first().find('li > ul > li[class="file_list__file"]') - .map((i, elem) => $(elem)) - .map((i, ele) => ({ - fileIndex: i, - name: ele.find('span > ul > li').contents().eq(1).text().trim().replace(/^.+\//g, ''), - path: ele.find('span > ul > li').contents().eq(1).text().trim(), - size: parseSize(ele.contents().eq(2).text()) - })).get() - }; - if (torrent.files.length >= 50) { - // a max of 50 files are displayed on the page - delete torrent.files; - } - resolve(torrent); - }); -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/kickass/kickass_dump_scraper.js b/scraper/scrapers/kickass/kickass_dump_scraper.js deleted file mode 100644 index 6e8dc5e..0000000 --- a/scraper/scrapers/kickass/kickass_dump_scraper.js +++ /dev/null @@ -1,98 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const LineByLineReader = require('line-by-line'); -const fs = require('fs'); -const { Type } = require('../../lib/types'); -const { createTorrentEntry, createSkipTorrentEntry, getStoredTorrentEntry } = require('../../lib/torrentEntries'); - -const NAME = 'KickassTorrents'; -const CSV_FILE_PATH = '/tmp/kickass.csv'; - -const limiter = new Bottleneck({ maxConcurrent: 40 }); - -async function scrape() { - console.log(`starting to scrape KAT dump: ${JSON.stringify(lastDump)}`); - - let entriesProcessed = 0; - const lr = new LineByLineReader(CSV_FILE_PATH); - lr.on('line', (line) => { - if (entriesProcessed % 1000 === 0) { - console.log(`Processed ${entriesProcessed} entries`); - } - const row = line.match(/(?<=^|\|)(".*"|[^|]+)(?=\||$)/g); - if (row.length !== 11) { - console.log(`Invalid row: ${line}`); - return; - } - const torrent = { - infoHash: row[0].toLowerCase(), - title: row[1] - .replace(/^"|"$/g, '') - .replace(/&/g, '&') - .replace(/&\w{2,6};/g, ' ') - .replace(/\s+/g, ' ') - .trim(), - category: row[2], - size: parseInt(row[5], 10), - seeders: parseInt(row[8], 10), - uploadDate: moment.unix(parseInt(row[10], 10)).toDate(), - }; - - if (!limiter.empty()) { - lr.pause() - } - - limiter.schedule(() => processTorrentRecord(torrent) - .catch((error) => console.log(`failed ${torrent.title} due: ${error}`))) - .then(() => limiter.empty()) - .then((empty) => empty && lr.resume()) - .then(() => entriesProcessed++); - }); - lr.on('error', (err) => { - console.log(err); - }); - lr.on('end', () => { - fs.unlink(CSV_FILE_PATH); - console.log(`finished to scrape KAT dump: ${JSON.stringify(lastDump)}!`); - }); -} - -const categoryMapping = { - "Movies": Type.MOVIE, - "TV": Type.SERIES, - "Anime": Type.ANIME -}; - -async function processTorrentRecord(record) { - if (!categoryMapping[record.category] || record.seeders === 0) { - return createSkipTorrentEntry(record); - } - if (await getStoredTorrentEntry(record)) { - return; - } - - const torrentFound = await findTorrent(record).catch(() => undefined); - - if (!torrentFound) { - return createSkipTorrentEntry(record); - } - - const torrent = { - infoHash: record.infoHash, - provider: NAME, - title: torrentFound.name, - size: record.size, - type: categoryMapping[record.category], - imdbId: torrentFound.imdbId, - uploadDate: record.uploadDate, - seeders: torrentFound.seeders, - }; - - return createTorrentEntry(torrent); -} - -async function findTorrent(record) { - return Promise.reject("not found"); -} - -module.exports = { scrape, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/kickass/kickass_scraper.js b/scraper/scrapers/kickass/kickass_scraper.js deleted file mode 100644 index f23e423..0000000 --- a/scraper/scrapers/kickass/kickass_scraper.js +++ /dev/null @@ -1,91 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const kickass = require('./kickass_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'KickassTorrents'; -const UNTIL_PAGE = 10; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => kickass.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - kickass.Categories.MOVIE, - kickass.Categories.TV, - kickass.Categories.ANIME, - ]; - - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return kickass.browse(({ category, page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < UNTIL_PAGE - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - const torrentFound = await kickass.torrent(record.torrentId).catch(() => undefined); - - if (!torrentFound || !TYPE_MAPPING[torrentFound.category]) { - return Promise.resolve('Invalid torrent record'); - } - - const torrent = { - infoHash: torrentFound.infoHash, - provider: NAME, - torrentId: torrentFound.torrentId, - title: torrentFound.name.replace(/\t|\s+/g, ' '), - type: TYPE_MAPPING[torrentFound.category], - size: torrentFound.size, - seeders: torrentFound.seeders, - uploadDate: torrentFound.uploadDate, - imdbId: torrentFound.imdbId, - languages: torrentFound.languages || undefined - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[kickass.Categories.MOVIE] = Type.MOVIE; - mapping[kickass.Categories.TV] = Type.SERIES; - mapping[kickass.Categories.ANIME] = Type.ANIME; - return mapping; -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/lapumia/lapumia_api.js b/scraper/scrapers/lapumia/lapumia_api.js deleted file mode 100644 index 5f9a9da..0000000 --- a/scraper/scrapers/lapumia/lapumia_api.js +++ /dev/null @@ -1,145 +0,0 @@ -const axios = require('axios'); -const moment = require("moment") -const cheerio = require("cheerio"); -const decode = require('magnet-uri'); -const { escapeHTML } = require('../../lib/metadata'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { isPtDubbed, sanitizePtName, sanitizePtOriginalName, sanitizePtLanguages } = require('../scraperHelper') - -const defaultTimeout = 10000; -const maxSearchPage = 50 - -const baseUrl = 'https://lapumia.org'; - -const Categories = { - MOVIE: null, - TV: 'series', - ANIME: 'animes', -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - return singleRequest(`${baseUrl}/${torrentId}`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map(el => ({ torrentId, ...el }))) - .catch((err) => { - console.warn(`Failed Lapumia ${torrentId} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, (config.extendToPage || 1)) - - return singleRequest(`${baseUrl}/page/${page}/?s=${keyword}`, config) - .then(body => parseTableBody(body)) - .then(torrents => torrents.length === 10 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const requestUrl = category ? `${baseUrl}/${category}/page/${page}/` : `${baseUrl}/page/${page}/` - - return singleRequest(requestUrl, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { userAgent: getRandomUserAgent(), timeout: timeout, follow: 2 }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('div.post').each((i, element) => { - const row = $(element); - try { - torrents.push({ - name: row.find("div > a").text(), - torrentId: row.find("div > a").attr("href").split('/')[3] - }); - } catch (e) { - console.log("Failed parsing Lupumia table entry") - } - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const magnets = $('h2 > span') - .filter((i, elem) => isPtDubbed($(elem).text())).parent() - .map((i, elem) => $(elem).nextUntil('h2, hr')) - .map((i, elem) => $(elem).find('a[href^="magnet"]')) - .map((i, section) => $(section).attr("href")).get(); - const category = parseCategory($('div.category').html()); - const details = $('div.content') - const torrents = magnets.filter(magnetLink => decode(magnetLink).name).map(magnetLink => ({ - title: sanitizePtName(escapeHTML(decode(magnetLink).name.replace(/\+/g, ' '))), - originalName: sanitizePtOriginalName(details.find('b:contains(\'Titulo Original:\')')[0].nextSibling.nodeValue), - year: details.find('b:contains(\'Ano de Lançamento:\')')[0].nextSibling.nodeValue.trim(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - category: category, - uploadDate: new Date(moment($('div.infos').text().split('•')[0].trim(), 'LL', 'pt-br').format()), - imdbId: $('.imdbRatingPlugin').attr('data-title') || null, - languages: sanitizePtLanguages(details.find('b:contains(\'Idioma\')')[0].nextSibling.nodeValue) - })) - resolve(torrents.filter((x) => x)); - }); -} - -function parseCategory(categorys) { - const $ = cheerio.load(categorys) - if ($('a:contains(\'Animes\')').text()) { - return Categories.ANIME - } - if ($('a:contains(\'Series\')').text()) { - return Categories.TV - } - return Categories.MOVIE -} - -module.exports = { torrent, search, browse, Categories }; \ No newline at end of file diff --git a/scraper/scrapers/lapumia/lapumia_scraper.js b/scraper/scrapers/lapumia/lapumia_scraper.js deleted file mode 100644 index e5ec085..0000000 --- a/scraper/scrapers/lapumia/lapumia_scraper.js +++ /dev/null @@ -1,112 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const lapumia = require("./lapumia_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); -const { getImdbId } = require("../../lib/metadata"); - -const NAME = "Lapumia"; -const UNTIL_PAGE = 5; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => lapumia.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - lapumia.Categories.MOVIE, - lapumia.Categories.TV - ]; - - return Promises.sequence(allowedCategories - .map((category) => () => scrapeLatestTorrentsForCategory(category))) - .then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return lapumia - .browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - return lapumia.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - if (!foundTorrent.imdbId && TYPE_MAPPING[foundTorrent.category] !== Type.ANIME) { - const info = { title: foundTorrent.originalName, year: foundTorrent.year }; - foundTorrent.imdbId = await getImdbId(info, TYPE_MAPPING[foundTorrent.category]).catch(() => undefined); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - imdbId: foundTorrent.imdbId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[lapumia.Categories.MOVIE] = Type.MOVIE; - mapping[lapumia.Categories.TV] = Type.SERIES; - mapping[lapumia.Categories.ANIME] = Type.ANIME; - return mapping; -} - -function untilPage(category) { - if (lapumia.Categories.ANIME === category) { - return 2; - } - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/nyaapantsu/nyaa_pantsu_api.js b/scraper/scrapers/nyaapantsu/nyaa_pantsu_api.js deleted file mode 100644 index c9ed20e..0000000 --- a/scraper/scrapers/nyaapantsu/nyaa_pantsu_api.js +++ /dev/null @@ -1,73 +0,0 @@ -const { pantsu } = require('nyaapi') - -const Categories = { - ANIME: { - ALL: '3_', - ENGLISH: '3_5', - RAW: '3_6', - MUSIC_VIDEO: '3_12', - NON_ENGLISH: '3_13', - }, - LIVE_ACTION: { - ALL: '5_', - ENGLISH: '5_9', - RAW: '5_11', - PROMOTIONAL_VIDEO: '5_10', - NON_ENGLISH: '5_18', - } -} - -function torrent(torrentId) { - if (!torrentId) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return pantsu.infoRequest(torrentId) - .then(result => parseTorrent(result)) - .catch(error => handleError(error, torrentId)); -} - -function search(query) { - return pantsu.search(query) - .then(results => results.map(torrent => parseTorrent(torrent))) - .catch(error => handleError(error, query)); -} - -function browse(config = {}) { - const page = config.page || 1; - const category = config.category || Categories.ANIME.ENGLISH; - - return pantsu.list(category, page) - .then(results => results.map(torrent => parseTorrent(torrent))) - .catch(error => handleError(error, category)); -} - -function handleError(error, identifier) { - if (error.statusCode && error.statusCode >= 400) { - return Promise.reject(new Error(`${error.statusCode}: [${identifier}] failed retrieval on NyaaPantsu`)); - } - return Promise.reject(error); -} - -function parseTorrent(torrent) { - return { - title: torrent.name.replace(/\t|\s+/g, ' ').trim(), - torrentId: torrent.id, - infoHash: torrent.hash.trim().toLowerCase(), - magnetLink: torrent.magnet, - torrentLink: torrent.torrent, - seeders: torrent.seeders, - size: torrent.filesize, - uploadDate: new Date(torrent.date), - category: `${torrent.category}_${torrent.sub_category}`, - languages: torrent.languages ? torrent.languages.join(',') : undefined, - files: torrent.file_list && torrent.file_list.length ? torrent.file_list.map((file, fileId) => ({ - fileIndex: fileId, - name: file.path.replace(/([^\/]+$)/, '$1'), - path: file.path, - size: file.filesize - })) : undefined - } -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/nyaapantsu/nyaa_pantsu_scraper.js b/scraper/scrapers/nyaapantsu/nyaa_pantsu_scraper.js deleted file mode 100644 index 60ad04b..0000000 --- a/scraper/scrapers/nyaapantsu/nyaa_pantsu_scraper.js +++ /dev/null @@ -1,97 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const pantsu = require('./nyaa_pantsu_api'); -const { Type } = require('../../lib/types'); -const Promises = require('../../lib/promises'); -const repository = require('../../lib/repository'); -const { updateCurrentSeeders, updateTorrentSize } = require('../../lib/torrent'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'NyaaPantsu'; -const UNTIL_PAGE = 5 - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - // const ids = ['1033095']; - // return Promise.all(ids.map(id => limiter.schedule(() => pantsu.torrent(id) - // .then(torrent => processTorrentRecord(torrent))))) - // .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => pantsu.torrent(torrent.torrentId)) - .then(foundTorrent => { - if (Number.isInteger(foundTorrent.seeders)) { - return [foundTorrent]; - } - return [] - }); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - pantsu.Categories.ANIME.ENGLISH - ]; - - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return pantsu.browse(({ page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent) - .catch(error => { - console.warn(`Failed processing [${torrent.infoHash}] ${torrent.title} due: `, error); - return Promise.resolve(); - }))))) - .then(resolved => resolved.length > 0 && page < UNTIL_PAGE - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (!record || await checkAndUpdateTorrent(record)) { - return record; - } - - if (!record.size) { - await updateTorrentSize(record) - } - if (record.seeders === null || record.seeders === undefined) { - await updateCurrentSeeders(record); - } - - const torrent = { - infoHash: record.infoHash, - torrentLink: record.torrentLink, - provider: NAME, - torrentId: record.torrentId, - title: record.title, - type: Type.ANIME, - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - languages: record.languages, - files: record.files || undefined - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/nyaasi/nyaa_si_api.js b/scraper/scrapers/nyaasi/nyaa_si_api.js deleted file mode 100644 index 39d2cb6..0000000 --- a/scraper/scrapers/nyaasi/nyaa_si_api.js +++ /dev/null @@ -1,66 +0,0 @@ -const { si } = require('nyaapi') -const { parseSize } = require("../scraperHelper"); - -const Categories = { - ANIME: { - ALL: '1_0', - MUSIC_VIDEO: '1_1', - ENGLISH: '1_2', - NON_ENGLISH: '1_3', - RAW: '1_4' - }, - LIVE_ACTION: { - ALL: '4_0', - ENGLISH: '4_1', - PROMOTIONAL_VIDEO: '4_2', - NON_ENGLISH: '4_3', - RAW: '4_4' - } -} - -function torrent(torrentId) { - if (!torrentId) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return si.infoRequest(torrentId) - .then(result => parseTorrent(result)) - .then(result => ({ ...result, torrentId })) - .catch(error => { - if (error.statusCode && error.statusCode === 404) { - return Promise.reject(new Error(`404: [${torrentId}] not found on NyaaSi`)); - } - return Promise.reject(error); - }); -} - -function search(query) { - return si.search(query, null, { category: Categories.ANIME.ENGLISH}) - .then(results => results.map(torrent => parseTorrent(torrent))); -} - -function browse(config = {}) { - const page = config.page || 1; - const category = config.category || Categories.ANIME.ENGLISH; - const sort = config.sort || 'id' - - return si.list(category, page, { sort }) - .then(response => response.results || []) - .then(results => results.map(torrent => parseTorrent(torrent))); -} - -function parseTorrent(torrent) { - return { - title: torrent.name.replace(/\t|\s+/g, ' ').trim(), - torrentId: torrent.id, - infoHash: torrent.hash.trim().toLowerCase(), - magnetLink: torrent.magnet, - torrentLink: torrent.torrent, - seeders: parseInt(torrent.seeders), - size: parseSize(torrent.filesize), - uploadDate: new Date(torrent.date), - category: torrent.sub_category, - } -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/nyaasi/nyaa_si_scraper.js b/scraper/scrapers/nyaasi/nyaa_si_scraper.js deleted file mode 100644 index d1ba1f7..0000000 --- a/scraper/scrapers/nyaasi/nyaa_si_scraper.js +++ /dev/null @@ -1,87 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const nyaasi = require('./nyaa_si_api'); -const { Type } = require('../../lib/types'); -const Promises = require('../../lib/promises'); -const repository = require('../../lib/repository'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'NyaaSi'; -const UNTIL_PAGE = 10 - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - // const ids = ['1292786']; - // return Promise.all(ids.map(id => limiter.schedule(() => nyaasi.torrent(id) - // .then(torrent => processTorrentRecord(torrent))))) - // .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); - // const queries = ['Sagrada Reset', 'Sakurada Reset']; - // return Promise.all(queries.map(query => limiter.schedule(() => nyaasi.search(query) - // .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent)))))))) - // .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - // return limiter.schedule(() => nyaasi.torrent(torrent.torrentId)) - // .then(foundTorrent => Number.isInteger(foundTorrent.seeders) ? [foundTorrent] : []); - return Promise.resolve([]); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - nyaasi.Categories.ANIME.ENGLISH - ]; - - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return nyaasi.browse({ page, sort: 'id' }) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent) - .catch(error => { - console.warn(`Failed processing [${torrent.infoHash}] ${torrent.title} due: `, error); - return Promise.resolve(); - }))))) - .then(resolved => resolved.length > 0 && page < UNTIL_PAGE - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (!record || await checkAndUpdateTorrent(record)) { - return record; - } - - const torrent = { - infoHash: record.infoHash, - torrentLink: record.torrentLink, - provider: NAME, - torrentId: record.torrentId, - title: record.title, - type: Type.ANIME, - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/ondebaixa/ondebaixa_api.js b/scraper/scrapers/ondebaixa/ondebaixa_api.js deleted file mode 100644 index 5b56924..0000000 --- a/scraper/scrapers/ondebaixa/ondebaixa_api.js +++ /dev/null @@ -1,151 +0,0 @@ -const axios = require('axios'); -const cheerio = require("cheerio"); -const decode = require('magnet-uri'); -const { escapeHTML } = require('../../lib/metadata'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { isPtDubbed, sanitizePtName, sanitizePtOriginalName, sanitizePtLanguages } = require('../scraperHelper') - -const defaultTimeout = 30000; -const maxSearchPage = 50 - -const baseUrl = 'https://ondebaixa.com'; - -const Categories = { - MOVIE: 'filmes', - TV: 'series', - ANIME: 'anime', - DESENHOS: 'desenhos' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} query`)); - } - const slug = encodeURIComponent(torrentId.split("/")[3]); - return singleRequest(`${baseUrl}/${slug}/`, config) - .then((body) => parseTorrentPage(body)) - .then((torrent) => torrent.map(el => ({ torrentId: slug, ...el }))) - .catch((err) => { - console.warn(`Failed OndeBaixo ${slug} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const page = config.page || 1; - const extendToPage = Math.min(maxSearchPage, (config.extendToPage || 1)) - - return singleRequest(`${baseUrl}/${keyword}/${page}/`, config) - .then(body => parseTableBody(body)) - .then(torrents => torrents.length === 40 && page < extendToPage - ? search(keyword, { ...config, page: page + 1 }).catch(() => []) - .then(nextTorrents => torrents.concat(nextTorrents)) - : torrents) - .catch((err) => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const requestUrl = category ? `${baseUrl}/${category}/${page}/` : `${baseUrl}/${page}/`; - - return singleRequest(requestUrl, config) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1)); -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('div.capa_larga.align-middle').each((i, element) => { - const row = $(element); - torrents.push({ - name: row.find("a").text(), - torrentId: row.find("a").attr("href") - }); - }); - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const magnets = $(`a[href^="magnet"]`) - .filter((i, elem) => isPtDubbed($(elem).attr('title'))) - .map((i, elem) => $(elem).attr("href")).get(); - const details = $('div#informacoes') - const category = details.find('span:contains(\'Gêneros: \')').next().html() - const torrents = magnets.map(magnetLink => { - const decodedMagnet = decode(magnetLink); - const name = sanitizePtName(escapeHTML(decodedMagnet.name || '').replace(/\+/g, ' ')); - const originalTitle = details.find('span:contains(\'Título Original: \')').next().text().trim(); - const year = details.find('span:contains(\'Ano de Lançamento: \')').next().text().trim(); - const fallBackTitle = `${originalTitle.trim()} ${year.trim()} ${name.trim()}`; - return { - title: name.length > 5 ? name : fallBackTitle, - originalName: sanitizePtOriginalName(originalTitle), - year: year, - infoHash: decodedMagnet.infoHash, - magnetLink: magnetLink, - category: parseCategory(category), - uploadDate: new Date($('time').attr('datetime')), - languages: sanitizePtLanguages(details.find('span:contains(\'Idioma\')').next().text()) - } - }); - resolve(torrents.filter((x) => x)); - }); -} - -function parseCategory(body) { - const $ = cheerio.load(body) - if ($("a[href*='anime']").text()) { - return Categories.ANIME - } - if ($("a[href*='series']").text()) { - return Categories.TV - } - if ($("a[href*='filmes']").text()) { - return Categories.MOVIE - } - if ($("a[href*='desenhos']").text()) { - return Categories.TV - } -} - -module.exports = { torrent, search, browse, Categories }; \ No newline at end of file diff --git a/scraper/scrapers/ondebaixa/ondebaixa_scraper.js b/scraper/scrapers/ondebaixa/ondebaixa_scraper.js deleted file mode 100644 index e098a72..0000000 --- a/scraper/scrapers/ondebaixa/ondebaixa_scraper.js +++ /dev/null @@ -1,113 +0,0 @@ -const moment = require("moment"); -const Bottleneck = require("bottleneck"); -const ondebaixa = require("./ondebaixa_api"); -const { Type } = require("../../lib/types"); -const repository = require("../../lib/repository"); -const Promises = require("../../lib/promises"); -const { createTorrentEntry, checkAndUpdateTorrent } = require("../../lib/torrentEntries"); -const { updateCurrentSeeders, updateTorrentSize } = require("../../lib/torrent"); -const { getImdbId } = require("../../lib/metadata"); - -const NAME = "OndeBaixa"; -const UNTIL_PAGE = 5; -const TYPE_MAPPING = typeMapping(); - -const limiter = new Bottleneck({ maxConcurrent: 5 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => ondebaixa.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - ondebaixa.Categories.MOVIE, - ondebaixa.Categories.TV, - ondebaixa.Categories.DESENHOS - ]; - - return Promises.sequence( - allowedCategories.map( - (category) => () => scrapeLatestTorrentsForCategory(category) - ) - ).then((entries) => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return ondebaixa - .browse({ category, page }) - .catch((error) => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then((torrents) => Promise.all(torrents.map((torrent) => limiter.schedule(() => processEntry(torrent))))) - .then((resolved) => resolved.length > 0 && page < untilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processEntry(entry) { - return ondebaixa.torrent(entry.torrentId) - .then(records => Promises.sequence(records.map(record => () => processTorrentRecord(record)))) - .catch(() => undefined); -} - -async function processTorrentRecord(foundTorrent) { - if (await checkAndUpdateTorrent({ provider: NAME, ...foundTorrent })) { - return foundTorrent; - } - - if (!foundTorrent.size) { - await updateTorrentSize(foundTorrent); - } - if (!Number.isInteger(foundTorrent.seeders)) { - await updateCurrentSeeders(foundTorrent); - } - if (!foundTorrent.imdbId && TYPE_MAPPING[foundTorrent.category] !== Type.ANIME) { - const info = { title: foundTorrent.originalName, year: foundTorrent.year }; - foundTorrent.imdbId = await getImdbId(info, TYPE_MAPPING[foundTorrent.category]).catch(() => undefined); - } - - const torrent = { - infoHash: foundTorrent.infoHash, - provider: NAME, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - imdbId: foundTorrent.imdbId, - uploadDate: foundTorrent.uploadDate, - seeders: foundTorrent.seeders, - size: foundTorrent.size, - files: foundTorrent.files, - languages: foundTorrent.languages - }; - return createTorrentEntry(torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[ondebaixa.Categories.MOVIE] = Type.MOVIE; - mapping[ondebaixa.Categories.TV] = Type.SERIES; - mapping[ondebaixa.Categories.DESENHOS] = Type.SERIES; - mapping[ondebaixa.Categories.ANIME] = Type.ANIME; - return mapping; -} - -function untilPage(category) { - return UNTIL_PAGE; -} - -module.exports = { scrape, updateSeeders, NAME }; diff --git a/scraper/scrapers/rarbg/rarbg_api.js b/scraper/scrapers/rarbg/rarbg_api.js deleted file mode 100644 index 694fe35..0000000 --- a/scraper/scrapers/rarbg/rarbg_api.js +++ /dev/null @@ -1,161 +0,0 @@ -const axios = require('axios'); -const decode = require('magnet-uri'); -const Promises = require('../../lib/promises'); -const { getRandomUserAgent } = require("../../lib/requestHelper"); - -const baseUrl = 'https://torrentapi.org/pubapi_v2.php'; -const appId = 'torrentio-addon'; -const defaultTimeout = 30000; -const retryDelay = 3000; - -let token; - -const Options = { - category: { - MOVIES_XVID: [14], - MOVIES_XVID_720P: [48], - MOVIES_X264: [17], - MOVIES_X264_1080P: [44], - MOVIES_X264_720P: [45], - MOVIES_X264_3D: [47], - MOVIES_X264_4K: [50], - MOVIES_X265_1080P: [54], - MOVIES_X265_4K: [51], - MOVIES_X265_4K_HDR: [52], - MOVIES_FULL_BD: [42], - MOVIES_BD_REMUX: [46], - MOVIES_HIGH_RES: [47, 50, 51, 52, 46], - TV_EPISODES: [18], - TV_UHD_EPISODES: [49], - TV_HD_EPISODES: [41], - MUSIC_MP3: [23], - MUSIC_FLAC: [25], - GAMES_PC_ISO: [27], - GAMES_PC_RIP: [28], - GAMES_PS3: [40], - GAMES_XBOX_360: [32], - SOFTWARE_PC_ISO: [33], - EBOOKS: [35], - XXX: [4], - }, - sort: { - LAST: 'last', - SEEDERS: 'seeders', - LEECHERS: 'leechers' - }, - format: { - JSON: 'json', - JSON_EXTENDED: 'json_extended' - }, - ranked: { - TRUE: 1, - FALSE: 0 - } -} - -function search(imdbId, params = {}) { - if (!imdbId) { - return Promise.reject(new Error(`Must define imdbId`)); - } - const parameters = { - mode: 'search', - search_imdb: imdbId, - category: params.category && params.category.join(';') || null, - limit: params.limit || 100, - sort: params.sort || Options.sort.SEEDERS, - min_seeders: params.min_seeders || undefined, - min_leechers: params.min_leechers || undefined, - format: params.format || Options.format.JSON_EXTENDED, - ranked: params.ranked || Options.ranked.FALSE - } - - return singleRequest(parameters).then(results => parseResults(results)); -} - -function browse(params = {}) { - const parameters = { - mode: 'list', - category: params.category && params.category.join(';') || null, - limit: params.limit || 100, - sort: params.sort || Options.sort.LAST, - min_seeders: params.min_seeders || undefined, - min_leechers: params.min_leechers || undefined, - format: params.format || Options.format.JSON_EXTENDED, - ranked: params.ranked || Options.ranked.FALSE - } - - return singleRequest(parameters).then(results => parseResults(results)); -} - -async function singleRequest(params = {}, config = {}, retries = 15) { - const timeout = config.timeout || defaultTimeout; - const headers = { - 'user-agent': getRandomUserAgent(), - 'accept-encoding': 'gzip, deflate', - 'accept-language': 'en-GB,en;q=0.9,en-US;q=0.8,lt;q=0.7,ar;q=0.6,fr;q=0.5,de;q=0.4' - }; - params.token = await getToken(); - params.app_id = appId; - - Object.keys(params) - .filter(key => params[key] === undefined || params[key] === null) - .forEach(key => delete params[key]); - const options = { headers, timeout, params }; - return axios.get(baseUrl, options) - .then(response => { - if (response.data && response.data.error_code === 4) { - // token expired - token = undefined; - return singleRequest(params, config); - } - if ((!response.data || !response.data.length || [5, 20].includes(response.data.error_code)) && retries > 0) { - // too many requests - return Promises.delay(retryDelay).then(() => singleRequest(params, config, retries - 1)); - } - if (response.status !== 200 || (response.data && response.data.error)) { - // something went wrong - return Promise.reject(response.data || `Failed RARGB request with status=${response.status}`); - } - - return response.data; - }) - .catch(error => { - if (error.response && [429].includes(error.response.status) && retries > 0) { - return Promises.delay(retryDelay).then(() => singleRequest(params, config, retries - 1)); - } - return Promise.reject(error.message || error); - }); -} - -function parseResults(results) { - if (!results || !Array.isArray(results.torrent_results)) { - return Promise.reject(`Incorrect results ${JSON.stringify(results)}`) - } - return results.torrent_results.map(result => parseResult(result)); -} - -function parseResult(result) { - return { - title: result.title, - infoHash: decode(result.download).infoHash, - magnetLink: result.download, - seeders: result.seeders, - leechers: result.leechers, - category: result.category, - size: result.size, - uploadDate: new Date(result.pubdate), - imdbId: result.episode_info && result.episode_info.imdb - } -} - -async function getToken() { - if (!token) { - const params = { get_token: 'get_token', app_id: appId }; - const options = { timeout: defaultTimeout, params }; - token = await axios.get(baseUrl, options) - .then(response => response.data.token); - } - return token; -} - -module.exports = { search, browse, Options }; diff --git a/scraper/scrapers/rarbg/rarbg_dump_scraper.js b/scraper/scrapers/rarbg/rarbg_dump_scraper.js deleted file mode 100644 index 5cf07b5..0000000 --- a/scraper/scrapers/rarbg/rarbg_dump_scraper.js +++ /dev/null @@ -1,80 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const rarbg = require('./rarbg_api'); -const { Type } = require('../../lib/types'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'RARBG'; - -const limiter = new Bottleneck({ maxConcurrent: 1, minTime: 3000 }); -const entryLimiter = new Bottleneck({ maxConcurrent: 20 }); -const allowedCategories = [ - rarbg.Options.category.MOVIES_XVID, - rarbg.Options.category.MOVIES_XVID_720P, - rarbg.Options.category.MOVIES_X265_1080P, - rarbg.Options.category.MOVIES_X264, - rarbg.Options.category.MOVIES_X264_720P, - rarbg.Options.category.MOVIES_X264_1080P, - rarbg.Options.category.MOVIES_HIGH_RES, - rarbg.Options.category.TV_EPISODES, - rarbg.Options.category.TV_UHD_EPISODES, - rarbg.Options.category.TV_HD_EPISODES -].reduce((a, b) => a.concat(b), []) - -async function scrape() { - console.log(`[${moment()}] starting ${NAME} dump scrape...`); - // const movieImdbIds = require('./rargb_movie_imdb_ids_2021-02-27.json'); - const seriesImdbIds = require('./rargb_series_imdb_ids_2021-02-27.json'); - //const allImdbIds = [].concat(movieImdbIds).concat(seriesImdbIds); - - return Promise.all( - seriesImdbIds.map(imdbId => limiter.schedule(() => getTorrentsForImdbId(imdbId)) - .then(torrents => Promise.all(torrents.map(t => entryLimiter.schedule(() => processTorrentRecord(t))))))) - .then(() => console.log(`[${moment()}] finished ${NAME} dump scrape`)); -} - -async function getTorrentsForImdbId(imdbId) { - return rarbg.search(imdbId, { category: allowedCategories }) - .then(torrents => { - console.log(`Completed ${imdbId} request`); - return torrents; - }) - .catch(error => { - console.warn(`Failed ${NAME} request for ${imdbId}: `, error); - return []; - }); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - const torrent = { - provider: NAME, - infoHash: record.infoHash, - title: record.title, - type: getType(record.category), - seeders: record.seeders, - size: record.size, - uploadDate: record.uploadDate, - imdbId: record.imdbId - }; - - return createTorrentEntry(torrent); -} - -const seriesCategories = [ - 'TV Episodes', - 'Movies/TV-UHD-episodes', - 'TV HD Episodes', -]; - -function getType(category) { - if (seriesCategories.includes(category)) { - return Type.SERIES; - } - return Type.MOVIE; -} - -module.exports = { scrape, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/rarbg/rarbg_scraper.js b/scraper/scrapers/rarbg/rarbg_scraper.js deleted file mode 100644 index 3a8c9d9..0000000 --- a/scraper/scrapers/rarbg/rarbg_scraper.js +++ /dev/null @@ -1,95 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const rarbg = require('./rarbg_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'RARBG'; - -const limiter = new Bottleneck({ maxConcurrent: 1, minTime: 2500 }); -const entryLimiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent, getImdbIdsMethod) { - // return getImdbIdsMethod() - // .then(imdbIds => Promise.all(imdbIds.map(imdbId => limiter.schedule(() => search(imdbId))))) - // .then(results => results.reduce((a, b) => a.concat(b), [])); - return Promise.resolve([]); -} - -async function scrapeLatestTorrents() { - const allowedCategories = [ - rarbg.Options.category.MOVIES_XVID, - rarbg.Options.category.MOVIES_XVID_720P, - rarbg.Options.category.MOVIES_X265_1080P, - rarbg.Options.category.MOVIES_X264, - rarbg.Options.category.MOVIES_X264_720P, - rarbg.Options.category.MOVIES_X264_1080P, - rarbg.Options.category.MOVIES_HIGH_RES, - rarbg.Options.category.TV_EPISODES, - rarbg.Options.category.TV_UHD_EPISODES, - rarbg.Options.category.TV_HD_EPISODES - ]; - - return Promises.sequence(allowedCategories - .map(category => () => limiter.schedule(() => scrapeLatestTorrentsForCategory(category)))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category) { - console.log(`Scrapping ${NAME} ${category} category`); - return rarbg.browse({ category: category }) - .then(torrents => Promise.all(torrents.map(t => entryLimiter.schedule(() => processTorrentRecord(t))))) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for ${category} due: `, error); - return Promise.resolve([]); - }); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - const torrent = { - provider: NAME, - infoHash: record.infoHash, - title: record.title, - type: getType(record.category), - seeders: record.seeders, - size: record.size, - uploadDate: record.uploadDate, - imdbId: record.imdbId - }; - - return createTorrentEntry(torrent); -} - -const seriesCategories = [ - 'TV Episodes', - 'Movies/TV-UHD-episodes', - 'TV HD Episodes', -]; - -function getType(category) { - if (seriesCategories.includes(category)) { - return Type.SERIES; - } - return Type.MOVIE; -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/rarbg/rargb_movie_imdb_ids_2020-04-22.json b/scraper/scrapers/rarbg/rargb_movie_imdb_ids_2020-04-22.json deleted file mode 100644 index e9d7439..0000000 --- a/scraper/scrapers/rarbg/rargb_movie_imdb_ids_2020-04-22.json +++ /dev/null @@ -1,42378 +0,0 @@ -[ - "tt7582798", - "tt8701132", - "tt0062413", - "tt7728754", - "tt0063364", - "tt0060325", - "tt4456270", - "tt5578150", - "tt6686700", - "tt1590796", - "tt0067676", - "tt7094312", - "tt4224622", - "tt0095616", - "tt6492196", - "tt8134310", - "tt1743720", - "tt8277710", - "tt2506934", - "tt2364673", - "tt3333240", - "tt7575702", - "tt11199514", - "tt7975244", - "tt4059460", - "tt0039756", - "tt0036527", - "tt11719418", - "tt0270822", - "tt0036535", - "tt5916158", - "tt2401745", - "tt7519410", - "tt6348410", - "tt0013257", - "tt5468130", - "tt0068612", - "tt4066836", - "tt8820178", - "tt5115676", - "tt2605238", - "tt7919950", - "tt2194703", - "tt4613910", - "tt7764650", - "tt3099358", - "tt5254868", - "tt2816682", - "tt7758170", - "tt4065450", - "tt0358086", - "tt5845320", - "tt6111628", - "tt6275838", - "tt3044580", - "tt5852292", - "tt6082228", - "tt8027448", - "tt5634556", - "tt6467152", - "tt6908274", - "tt2213924", - "tt7349896", - "tt6318484", - "tt7255620", - "tt11290298", - "tt4622682", - "tt11558924", - "tt8269120", - "tt2430922", - "tt3638542", - "tt8924846", - "tt3468260", - "tt5141686", - "tt7526414", - "tt4794544", - "tt6420742", - "tt1686812", - "tt4026336", - "tt5630396", - "tt8055880", - "tt3751306", - "tt8726098", - "tt6368348", - "tt2369754", - "tt0221946", - "tt9659470", - "tt7879350", - "tt0135068", - "tt5974402", - "tt0056312", - "tt7010412", - "tt7373310", - "tt0084577", - "tt8535968", - "tt0076098", - "tt2076292", - "tt1408089", - "tt2072190", - "tt3475130", - "tt0126968", - "tt1556190", - "tt5171296", - "tt3104062", - "tt0081194", - "tt0260654", - "tt0185508", - "tt4510892", - "tt0415478", - "tt2097868", - "tt2299954", - "tt0051561", - "tt2073550", - "tt0023251", - "tt2076800", - "tt7239688", - "tt7074788", - "tt0068469", - "tt4701906", - "tt5815156", - "tt6905366", - "tt8151416", - "tt6304040", - "tt7817670", - "tt11354400", - "tt11434306", - "tt0084587", - "tt1719497", - "tt9046574", - "tt9577222", - "tt08948208", - "tt0306903", - "tt10627720", - "tt0119303", - "tt5167200", - "tt3863870", - "tt0972785", - "tt10469384", - "tt0068954", - "tt0389912", - "tt0113063", - "tt0433363", - "tt9573980", - "tt0076937", - "tt0108228", - "tt4453792", - "tt0157079", - "tt0334965", - "tt7387632", - "tt0497353", - "tt10481868", - "tt5687270", - "tt6739894", - "tt10380706", - "tt10795414", - "tt3513548", - "tt0452668", - "tt0092173", - "tt8211214", - "tt0384638", - "tt1799349", - "tt1713800", - "tt1799350", - "tt6620260", - "tt3180626", - "tt2771932", - "tt3659718", - "tt1799352", - "tt2496534", - "tt3549984", - "tt3760700", - "tt5872368", - "tt4938416", - "tt3383556", - "tt9675210", - "tt4986906", - "tt6283598", - "tt3760706", - "tt0296034", - "tt5424368", - "tt4238844", - "tt7559576", - "tt0106963", - "tt0088772", - "tt5434568", - "tt6075688", - "tt0068364", - "tt3861212", - "tt2522274", - "tt6405058", - "tt8666500", - "tt4539508", - "tt0064728", - "tt8439180", - "tt1249170", - "tt5285684", - "tt3794354", - "tt7091328", - "tt6833774", - "tt5272052", - "tt0126568", - "tt0192213", - "tt0113732", - "tt0112820", - "tt6949498", - "tt0055977", - "tt5226192", - "tt7615052", - "tt4844140", - "tt0182719", - "tt9179168", - "tt0251382", - "tt0118119", - "tt8008382", - "tt0277944", - "tt6616074", - "tt3355258", - "tt0083361", - "tt3996164", - "tt6683912", - "tt4208594", - "tt5797184", - "tt3473646", - "tt5047108", - "tt8372298", - "tt5128626", - "tt9347750", - "tt7665180", - "tt8629748", - "tt4712202", - "tt10880084", - "tt1815989", - "tt0105128", - "tt2573372", - "tt5160614", - "tt4169146", - "tt3984356", - "tt10985510", - "tt7596680", - "tt7957314", - "tt0112828", - "tt6753132", - "tt0079031", - "tt0097619", - "tt0452592", - "tt9035872", - "tt8816194", - "tt1179773", - "tt9026524", - "tt0150500", - "tt0094608", - "tt6081882", - "tt5814534", - "tt0106676", - "tt9057942", - "tt5033998", - "tt5727208", - "tt6394270", - "tt0198781", - "tt9353436", - "tt0455584", - "tt0118631", - "tt0035460", - "tt7713068", - "tt0381838", - "tt0034074", - "tt0120623", - "tt0046124", - "tt10121372", - "tt7287136", - "tt0111003", - "tt1453405", - "tt0042206", - "tt0104719", - "tt0071330", - "tt3281548", - "tt0102296", - "tt0041673", - "tt0067345", - "tt3530146", - "tt0125784", - "tt4715470", - "tt2231605", - "tt7473034", - "tt1046163", - "tt0387575", - "tt0100332", - "tt3661798", - "tt0769507", - "tt0068367", - "tt0104706", - "tt0145046", - "tt0162983", - "tt0100503", - "tt0816671", - "tt1456520", - "tt0217080", - "tt0060580", - "tt0070003", - "tt2672746", - "tt10645860", - "tt7379994", - "tt0065456", - "tt0086907", - "tt0227051", - "tt0120770", - "tt5596352", - "tt7952920", - "tt0098260", - "tt10606866", - "tt0484562", - "tt5815420", - "tt6806448", - "tt3700364", - "tt0185125", - "tt7220118", - "tt0065009", - "tt0101725", - "tt6403382", - "tt2017486", - "tt0116421", - "tt4730638", - "tt9898086", - "tt7446692", - "tt1772407", - "tt4030354", - "tt3006826", - "tt1083470", - "tt7380006", - "tt6270640", - "tt0281820", - "tt8426270", - "tt1711016", - "tt7776830", - "tt10509642", - "tt0495751", - "tt6974254", - "tt4546580", - "tt8241704", - "tt2926176", - "tt0357470", - "tt4985772", - "tt6165902", - "tt2297894", - "tt2913562", - "tt0070016", - "tt6114246", - "tt5791222", - "tt4257962", - "tt2751468", - "tt3561800", - "tt5467324", - "tt7331748", - "tt3580692", - "tt2442488", - "tt0978813", - "tt7725070", - "tt5841094", - "tt11049100", - "tt2246779", - "tt8786466", - "tt6833550", - "tt2641678", - "tt7410684", - "tt1703909", - "tt8110630", - "tt2663380", - "tt6543358", - "tt2523876", - "tt3741146", - "tt6690236", - "tt5180332", - "tt7752054", - "tt5661030", - "tt9349942", - "tt5105734", - "tt5602318", - "tt5838396", - "tt10287376", - "tt11261584", - "tt6373518", - "tt7750864", - "tt1302006", - "tt0314197", - "tt4604154", - "tt0089789", - "tt0348124", - "tt0118601", - "tt7666792", - "tt0432432", - "tt11738792", - "tt6802922", - "tt6010976", - "tt5827916", - "tt8493962", - "tt8764144", - "tt7049448", - "tt10619724", - "tt4328094", - "tt4933914", - "tt1404653", - "tt9155326", - "tt4073582", - "tt11421396", - "tt0064827", - "tt4984930", - "tt7689484", - "tt1135774", - "tt4766892", - "tt11379280", - "tt1773741", - "tt0339464", - "tt6522846", - "tt3320110", - "tt2512030", - "tt7183876", - "tt3154422", - "tt1969091", - "tt4966130", - "tt9077188", - "tt3742040", - "tt5079996", - "tt5883926", - "tt7208822", - "tt8343642", - "tt1657302", - "tt7607492", - "tt2153222", - "tt2519318", - "tt2883224", - "tt7657120", - "tt6959668", - "tt9154584", - "tt3042964", - "tt6254796", - "tt5711092", - "tt6283758", - "tt5127090", - "tt9060534", - "tt6517392", - "tt7607370", - "tt5886510", - "tt5846888", - "tt8322802", - "tt9476490", - "tt7607416", - "tt0100409", - "tt5239436", - "tt9269852", - "tt9017614", - "tt6603568", - "tt6819018", - "tt3752700", - "tt4458408", - "tt9247710", - "tt0048499", - "tt0091193", - "tt6173346", - "tt7018722", - "tt0063230", - "tt8152324", - "tt0426396", - "tt0085320", - "tt0109593", - "tt9736976", - "tt9515298", - "tt0059726", - "tt0052606", - "tt0066955", - "tt0318281", - "tt3907584", - "tt10984420", - "tt10043726", - "tt2352302", - "tt6185692", - "tt6316506", - "tt8703882", - "tt6051260", - "tt9099102", - "tt11255486", - "tt5757874", - "tt2315628", - "tt7632000", - "tt4174926", - "tt7453044", - "tt4061424", - "tt3574966", - "tt0124295", - "tt7456534", - "tt0272036", - "tt0050168", - "tt6957366", - "tt5277030", - "tt7522002", - "tt4842648", - "tt5935518", - "tt4317858", - "tt8722346", - "tt4657460", - "tt0045607", - "tt0101414", - "tt0005180794", - "tt5148460", - "tt4690878", - "tt4641264", - "tt6554744", - "tt1853563", - "tt5194226", - "tt5615904", - "tt5356490", - "tt0185297", - "tt5362688", - "tt0437459", - "tt4684488", - "tt9015306", - "tt5514846", - "tt0079187", - "tt5641606", - "tt0209264", - "tt1729609", - "tt5131960", - "tt0064355", - "tt6492056", - "tt5343512", - "tt4480624", - "tt3633646", - "tt6319942", - "tt3864466", - "tt4419506", - "tt1581845", - "tt0860837", - "tt4036488", - "tt1522295", - "tt0374853", - "tt0450087", - "tt2693060", - "tt0365866", - "tt2095765", - "tt8633088", - "tt6523668", - "tt6910012", - "tt3254710", - "tt6817296", - "tt0985101", - "tt8615816", - "tt6053946", - "tt5138728", - "tt6023110", - "tt4487264", - "tt6054328", - "tt3262990", - "tt6959666", - "tt2199733", - "tt7107342", - "tt5339586", - "tt7046112", - "tt6082614", - "tt1595583", - "tt2123145", - "tt2514162", - "tt7663776", - "tt7606464", - "tt9060526", - "tt10656112", - "tt7587068", - "tt5979874", - "tt7788188", - "tt4920096", - "tt6017922", - "tt5137022", - "tt0107665", - "tt9097148", - "tt9028632", - "tt9150970", - "tt0056234", - "tt3606314", - "tt2546038", - "tt4736576", - "tt4326556", - "tt8103746", - "tt9613316", - "tt4125856", - "tt2771200", - "tt6333088", - "tt1703231", - "tt3808172", - "tt7738134", - "tt4156518", - "tt0106417", - "tt5842792", - "tt6483242", - "tt2147048", - "tt4048186", - "tt1222816", - "tt0107306", - "tt7131060", - "tt4374814", - "tt6318556", - "tt1562910", - "tt3356648", - "tt3695154", - "tt7725144", - "tt1379233", - "tt2091880", - "tt2087696", - "tt5241380", - "tt4339852", - "tt0191801", - "tt1043434", - "tt6039474", - "tt3487446", - "tt2463464", - "tt1233503", - "tt9770590", - "tt7183082", - "tt0287665", - "tt2708922", - "tt2458608", - "tt4566712", - "tt2829108", - "tt2582960", - "tt2753654", - "tt5773474", - "tt7160286", - "tt4226162", - "tt7709710", - "tt6539818", - "tt7924764", - "tt7607558", - "tt4058572", - "tt5378728", - "tt4696502", - "tt6475778", - "tt8028842", - "tt8563704", - "tt9174348", - "tt7607378", - "tt7150482", - "tt7607450", - "tt9861504", - "tt0114952", - "tt7014356", - "tt8101766", - "tt7937168", - "tt0102867", - "tt0070339", - "tt7149066", - "tt0056241", - "tt0087366", - "tt7320482", - "tt3418844", - "tt9820352", - "tt10085338", - "tt5919756", - "tt5599332", - "tt6902676", - "tt2402107", - "tt5506864", - "tt8856470", - "tt4344624", - "tt7431740", - "tt5706294", - "tt8611746", - "tt2532454", - "tt3243664", - "tt9569212", - "tt5461596", - "tt5907916", - "tt7600382", - "tt0086257", - "tt5883022", - "tt5706292", - "tt5520970", - "tt4778500", - "tt0087425", - "tt0139465", - "tt0390272", - "tt5701132", - "tt8324578", - "tt6518634", - "tt0100134", - "tt0417225", - "tt0117271", - "tt3281640", - "tt10369632", - "tt3974972", - "tt3323588", - "tt7016254", - "tt2096615", - "tt5643272", - "tt0307919", - "tt4368086", - "tt4909348", - "tt9676614", - "tt9796226", - "tt5366234", - "tt4994254", - "tt1433775", - "tt3439430", - "tt6459288", - "tt1707375", - "tt1673470", - "tt6402212", - "tt0058698", - "tt1072756", - "tt3293462", - "tt5032026", - "tt5708082", - "tt6427156", - "tt0218388", - "tt1152815", - "tt7076838", - "tt0354234", - "tt6601146", - "tt3826628", - "tt6502534", - "tt2115439", - "tt7297954", - "tt6430360", - "tt3901962", - "tt2448374", - "tt5070076", - "tt3118120", - "tt6385840", - "tt1299362", - "tt7797250", - "tt2713440", - "tt9089908", - "tt5152484", - "tt7607502", - "tt9642038", - "tt2631472", - "tt2036452", - "tt2677368", - "tt0910970", - "tt3589494", - "tt5652620", - "tt6085412", - "tt6759686", - "tt9630196", - "tt0057399", - "tt0065026", - "tt1260351", - "tt5576336", - "tt0124595", - "tt1049413", - "tt0120512", - "tt0062659", - "tt1410261", - "tt0082250", - "tt0069946", - "tt1757796", - "tt3008816", - "tt0118698", - "tt0069957", - "tt5581502", - "tt4915318", - "tt0069312", - "tt0079477", - "tt0060261", - "tt7003976", - "tt0095491", - "tt9356952", - "tt7798644", - "tt5051278", - "tt0030909", - "tt9434836", - "tt2258724", - "tt4194054", - "tt0074472", - "tt9506000", - "tt11474156", - "tt6888132", - "tt5990464", - "tt7491732", - "tt0375669", - "tt0093507", - "tt8890690", - "tt11766318", - "tt3891834", - "tt8820136", - "tt0116676", - "tt1449383", - "tt0990376", - "tt1458939", - "tt6798766", - "tt6318432", - "tt6328116", - "tt2769276", - "tt3588082", - "tt0790810", - "tt8398704", - "tt1390471", - "tt6033150", - "tt2343761", - "tt2935800", - "tt0105108", - "tt4025594", - "tt2992904", - "tt1978491", - "tt6645896", - "tt8775056", - "tt6902018", - "tt8469818", - "tt3635998", - "tt3918650", - "tt3886372", - "tt2353887", - "tt0087055", - "tt6596630", - "tt9425078", - "tt6756464", - "tt2776304", - "tt4286086", - "tt4240704", - "tt3477070", - "tt6984530", - "tt4935898", - "tt2952692", - "tt9174108", - "tt6772524", - "tt8717974", - "tt0927619", - "tt3234126", - "tt2401199", - "tt5566936", - "tt10152200", - "tt0200529", - "tt5579910", - "tt1119621", - "tt0073594", - "tt9251748", - "tt0092884", - "tt11305096", - "tt9635616", - "tt0405061", - "tt0455135", - "tt5323760", - "tt7737394", - "tt0325655", - "tt5073642", - "tt10525174", - "tt9099136", - "tt5976054", - "tt9595506", - "tt0218127", - "tt7410922", - "tt6122540", - "tt0214730", - "tt2759372", - "tt11283990", - "tt0338135", - "tt0064787", - "tt3509078", - "tt0092798", - "tt4838248", - "tt8702008", - "tt0090985", - "tt7288442", - "tt8946378", - "tt0247638", - "tt5745450", - "tt0837562", - "tt0368933", - "tt0091053", - "tt0096438", - "tt0104940", - "tt8287232", - "tt9078374", - "tt7288408", - "tt3295240", - "tt0896816", - "tt0118780", - "tt0211577", - "tt0104943", - "tt0114977", - "tt1227774", - "tt3016748", - "tt11736170", - "tt9587244", - "tt1369571", - "tt0345119", - "tt0085595", - "tt7840316", - "tt0874333", - "tt5794306", - "tt0114065", - "tt1192620", - "tt8443432", - "tt1086777", - "tt0094869", - "tt0081004", - "tt1332033", - "tt1757841", - "tt9119200", - "tt11409576", - "tt6751668", - "tt2248739", - "tt7355708", - "tt5097410", - "tt2370140", - "tt5732482", - "tt6856540", - "tt3717314", - "tt6423408", - "tt4283892", - "tt5990270", - "tt6041030", - "tt2385115", - "tt5883008", - "tt5275844", - "tt6257714", - "tt1334558", - "tt5425144", - "tt5598216", - "tt6710214", - "tt7806998", - "tt6000140", - "tt5037288", - "tt6170130", - "tt4185572", - "tt4930760", - "tt7807000", - "tt6562866", - "tt6090102", - "tt7574286", - "tt6550456", - "tt1791687", - "tt4465220", - "tt6608034", - "tt8257900", - "tt5946232", - "tt6302122", - "tt5374002", - "tt9326056", - "tt8106284", - "tt5571712", - "tt6023444", - "tt6438918", - "tt5222724", - "tt6715992", - "tt5861260", - "tt0120366", - "tt0080427", - "tt0144250", - "tt7344360", - "tt7588752", - "tt5457520", - "tt6854248", - "tt11324534", - "tt0110115", - "tt5709506", - "tt3551400", - "tt1230126", - "tt2150139", - "tt0110392", - "tt0301555", - "tt5065500", - "tt5821256", - "tt3949586", - "tt4687906", - "tt9741588", - "tt8096832", - "tt6820324", - "tt6317016", - "tt0367088", - "tt7103742", - "tt7179102", - "tt2276071", - "tt3091320", - "tt2667714", - "tt2484460", - "tt6225534", - "tt2205762", - "tt10228168", - "tt6499666", - "tt0090098", - "tt8359816", - "tt5233090", - "tt3600760", - "tt2920294", - "tt5817548", - "tt3612008", - "tt0436058", - "tt0052924", - "tt1843207", - "tt0298066", - "tt1337117", - "tt6702308", - "tt10645682", - "tt8949410", - "tt3677840", - "tt3827462", - "tt1820413", - "tt2122355", - "tt2308682", - "tt3121050", - "tt0352190", - "tt1448497", - "tt3586118", - "tt5351044", - "tt5974406", - "tt4690052", - "tt9099938", - "tt1529666", - "tt2392842", - "tt3589968", - "tt6312802", - "tt0136242", - "tt7962890", - "tt0114991", - "tt6148782", - "tt1992268", - "tt7230148", - "tt7046524", - "tt4627224", - "tt1935914", - "tt0102996", - "tt5058148", - "tt4077742", - "tt3280176", - "tt3118696", - "tt1668212", - "tt10964516", - "tt2516326", - "tt5048716", - "tt4454406", - "tt0350079", - "tt5786588", - "tt9436204", - "tt10887846", - "tt3646058", - "tt6794460", - "tt0250310", - "tt0289782", - "tt8178958", - "tt10964532", - "tt2279353", - "tt9071322", - "tt1833657", - "tt0059079", - "tt7995680", - "tt0045077", - "tt6890618", - "tt6173484", - "tt7456312", - "tt10844816", - "tt9133378", - "tt7979142", - "tt7334342", - "tt6190204", - "tt2900822", - "tt6075764", - "tt1636844", - "tt0067634", - "tt5045746", - "tt0073279", - "tt9671918", - "tt5512160", - "tt7335104", - "tt6103812", - "tt8676426", - "tt0012952", - "tt5912470", - "tt8883472", - "tt5778092", - "tt5086446", - "tt5999588", - "tt0059796", - "tt0111070", - "tt0078382", - "tt6181964", - "tt0131449", - "tt0065380", - "tt8907428", - "tt0090103", - "tt4058836", - "tt0042383", - "tt6019068", - "tt0099381", - "tt1226251", - "tt5521724", - "tt2689966", - "tt6258232", - "tt6522678", - "tt3360148", - "tt0107944", - "tt0025731", - "tt5356318", - "tt0120241", - "tt2203881", - "tt3973656", - "tt0366544", - "tt2924590", - "tt8435932", - "tt0039949", - "tt7534054", - "tt1500694", - "tt0105565", - "tt5538118", - "tt0431641", - "tt0058383", - "tt0171357", - "tt81851823", - "tt9514970", - "tt0070136", - "tt2373878", - "tt0057334", - "tt9198974", - "tt0243595", - "tt6733372", - "tt0384819", - "tt7931422", - "tt3415734", - "tt7493804", - "tt6121428", - "tt0091637", - "tt5723056", - "tt2265373", - "tt0065955", - "tt7112158", - "tt7154176", - "tt7743588", - "tt5769440", - "tt7240562", - "tt7399726", - "tt7757028", - "tt2634200", - "tt6568190", - "tt7994070", - "tt6816210", - "tt4734132", - "tt5847760", - "tt3496094", - "tt2379418", - "tt6090190", - "tt1667875", - "tt3687938", - "tt4131594", - "tt6275334", - "tt7228086", - "tt5425488", - "tt0049278", - "tt7128868", - "tt7493472", - "tt6859024", - "tt7162400", - "tt6314906", - "tt3265574", - "tt11780762", - "tt0181739", - "tt1859558", - "tt0103793", - "tt7213936", - "tt8516596", - "tt4630466", - "tt0116839", - "tt0189192", - "tt0067980", - "tt2226437", - "tt6977470", - "tt1787741", - "tt0169299", - "tt11177308", - "tt0090009", - "tt0094882", - "tt2523852", - "tt1621014", - "tt3309038", - "tt0108654", - "tt4199110", - "tt0109675", - "tt0118600", - "tt8102036", - "tt6705640", - "tt0109891", - "tt6398570", - "tt0443489", - "tt0479162", - "tt6466464", - "tt6854672", - "tt1842520", - "tt9850064", - "tt8707922", - "tt4838690", - "tt7852686", - "tt5831668", - "tt3967878", - "tt3329554", - "tt0065636", - "tt6679412", - "tt10176734", - "tt6627682", - "tt10623478", - "tt0202623", - "tt3404246", - "tt0057532", - "tt2093269", - "tt5791732", - "tt0804513", - "tt2378390", - "tt1295021", - "tt0106215", - "tt5547496", - "tt7288084", - "tt3473390", - "tt2625270", - "tt4216890", - "tt1151813", - "tt2358456", - "tt1314270", - "tt1430082", - "tt5686622", - "tt2343600", - "tt7841664", - "tt3074610", - "tt6332764", - "tt6881530", - "tt2522908", - "tt5111550", - "tt2233170", - "tt2380207", - "tt6816388", - "tt8176578", - "tt7752142", - "tt4454648", - "tt5566684", - "tt6120500", - "tt0302674", - "tt0105306", - "tt2398514", - "tt4486122", - "tt2605244", - "tt2318763", - "tt2901584", - "tt4188822", - "tt6576144", - "tt5796986", - "tt0835419", - "tt1619622", - "tt7265806", - "tt7664414", - "tt8834152", - "tt4226446", - "tt2153212", - "tt1185344", - "tt4484636", - "tt6465314", - "tt5706242", - "tt6370616", - "tt5671902", - "tt6678722", - "tt7278738", - "tt6318202", - "tt4648586", - "tt7193448", - "tt2329206", - "tt7850992", - "tt6170268", - "tt6969140", - "tt5567492", - "tt7861698", - "tt9184886", - "tt2796278", - "tt0865482", - "tt0079357", - "tt6191090", - "tt4061848", - "tt7902184", - "tt9170648", - "tt9817258", - "tt5716624", - "tt7434070", - "tt5602922", - "tt7646384", - "tt3667148", - "tt5784340", - "tt8717296", - "tt2772584", - "tt9428026", - "tt0027869", - "tt0033539", - "tt7476418", - "tt0020538", - "tt0013367", - "tt0037154", - "tt0024960", - "tt11410450", - "tt8211258", - "tt0034546", - "tt0034613", - "tt4076756", - "tt4584718", - "tt7979668", - "tt7141520", - "tt2967856", - "tt0252299", - "tt7673930", - "tt2141623", - "tt2042692", - "tt1699746", - "tt5971394", - "tt0251448", - "tt0109370", - "tt0120797", - "tt0090770", - "tt4695548", - "tt6095486", - "tt0377749", - "tt2205561", - "tt7461372", - "tt2768084", - "tt6924650", - "tt1479388", - "tt10696018", - "tt10011232", - "tt2271315", - "tt5663298", - "tt5273720", - "tt6097422", - "tt8028600", - "tt11642302", - "tt0095613", - "tt0092264", - "tt0421135", - "tt1557181", - "tt0106877", - "tt4977524", - "tt8226892", - "tt0097891", - "tt3079222", - "tt1929433", - "tt5946668", - "tt2337686", - "tt9352128", - "tt1823058", - "tt1059317", - "tt5487734", - "tt0266824", - "tt1665743", - "tt3621336", - "tt5884004", - "tt1455061", - "tt3701506", - "tt4225478", - "tt0119166", - "tt3392142", - "tt5661770", - "tt4154126", - "tt7635226", - "tt7121252", - "tt6522634", - "tt2325833", - "tt5849950", - "tt11379322", - "tt0246772", - "tt8513302", - "tt0119733", - "tt1127883", - "tt1621642", - "tt4207094", - "tt4459912", - "tt4222718", - "tt4917862", - "tt2197926", - "tt7609436", - "tt2180317", - "tt6264928", - "tt2255787", - "tt6890582", - "tt5198850", - "tt8383596", - "tt1609160", - "tt8251336", - "tt4867110", - "tt1773687", - "tt2566580", - "tt6830780", - "tt0415838", - "tt3711510", - "tt5140522", - "tt1522748", - "tt10887838", - "tt2374564", - "tt9426186", - "tt4998984", - "tt10161238", - "tt6451304", - "tt7583568", - "tt5475678", - "tt1801123", - "tt4520988", - "tt1623013", - "tt7479540", - "tt6483458", - "tt3691930", - "tt6025626", - "tt8123886", - "tt2525802", - "tt1446678", - "tt4266638", - "tt7550576", - "tt7210252", - "tt0109504", - "tt6828390", - "tt6680962", - "tt5058038", - "tt9445054", - "tt0091765", - "tt8804284", - "tt6017312", - "tt5079382", - "tt5608000", - "tt6338444", - "tt5159204", - "tt6053948", - "tt0159730", - "tt8669354", - "tt1799572", - "tt0088195", - "tt0828151", - "tt0367960", - "tt2009538", - "tt1570983", - "tt5855164", - "tt2962144", - "tt5969714", - "tt5894410", - "tt1487864", - "tt0293357", - "tt2170667", - "tt3822818", - "tt7425520", - "tt3500528", - "tt1418895", - "tt4621470", - "tt3911294", - "tt1584131", - "tt0102175", - "tt5662906", - "tt0841925", - "tt3012832", - "tt6347150", - "tt4771956", - "tt2076216", - "tt7919426", - "tt0149016", - "tt8007436", - "tt4078252", - "tt9069126", - "tt4714896", - "tt0076591", - "tt10799008", - "tt7022402", - "tt2820578", - "tt7775886", - "tt9010900", - "tt2960270", - "tt7620650", - "tt7026370", - "tt6628322", - "tt4883990", - "tt11456366", - "tt8160262", - "tt10975992", - "tt0078227", - "tt8178116", - "tt8976832", - "tt6162762", - "tt8075256", - "tt7977310", - "tt6453158", - "tt9643214", - "tt0014359", - "tt4265500", - "tt5282590", - "tt8755500", - "tt0332626", - "tt9766166", - "tt0099328", - "tt1437364", - "tt0080492", - "tt0072812", - "tt0328099", - "tt8866450", - "tt5488870", - "tt5144072", - "tt0465440", - "tt7095444", - "tt0780536", - "tt8549590", - "tt9703882", - "tt0049088", - "tt9019312", - "tt3472586", - "tt0063552", - "tt8676984", - "tt0045544", - "tt7575778", - "tt0217038", - "tt5665040", - "tt8319778", - "tt9806322", - "tt0029785", - "tt6515458", - "tt0041090", - "tt9575160", - "tt0181966", - "tt9129808", - "tt0047238", - "tt1849751", - "tt3455826", - "tt0024262", - "tt6149282", - "tt0221297", - "tt0083965", - "tt0047205", - "tt0165643", - "tt2137442", - "tt11662610", - "tt1815943", - "tt3363888", - "tt5643398", - "tt6515470", - "tt0119426", - "tt7933282", - "tt3876674", - "tt0479354", - "tt0486639", - "tt1517239", - "tt5479616", - "tt4924942", - "tt6157994", - "tt7109088", - "tt6910020", - "tt3691446", - "tt6914542", - "tt0399072", - "tt4722674", - "tt9095324", - "tt3374034", - "tt7027092", - "tt3076106", - "tt6168298", - "tt5831146", - "tt3349772", - "tt1568926", - "tt6333056", - "tt3628356", - "tt5895892", - "tt7095852", - "tt11404430", - "tt10149756", - "tt7490256", - "tt6985094", - "tt9617710", - "tt6690322", - "tt2836450", - "tt0342778", - "tt4704314", - "tt5562172", - "tt4225092", - "tt7712978", - "tt5930038", - "tt8327492", - "tt5957584", - "tt8647310", - "tt11571902", - "tt5984662", - "tt8745960", - "tt7950334", - "tt9894470", - "tt7187768", - "tt8964214", - "tt10009030", - "tt6722726", - "tt5829032", - "tt7369550", - "tt0450455", - "tt0067750", - "tt8358220", - "tt7653254", - "tt6189372", - "tt7262846", - "tt9614440", - "tt5047458", - "tt6515910", - "tt0074715", - "tt8584722", - "tt0115006", - "tt6413868", - "tt0039020", - "tt0050753", - "tt0295427", - "tt0099772", - "tt0032285", - "tt0101644", - "tt1564559", - "tt0096378", - "tt1167611", - "tt0043263", - "tt0065401", - "tt0049684", - "tt0124198", - "tt0049717", - "tt0045066", - "tt0062760", - "tt9354842", - "tt0039657", - "tt0046878", - "tt0082477", - "tt9062342", - "tt5974044", - "tt0114736", - "tt5176580", - "tt4125222", - "tt5868910", - "tt5210324", - "tt3399916", - "tt0319769", - "tt2077828", - "tt1117394", - "tt6659416", - "tt0319920", - "tt7525778", - "tt2519468", - "tt5236900", - "tt5129818", - "tt0304229", - "tt9036126", - "tt0098313", - "tt3120280", - "tt0073326", - "tt0277744", - "tt3740066", - "tt0338216", - "tt0106552", - "tt0104905", - "tt4575930", - "tt1757800", - "tt1909826", - "tt8033592", - "tt2407418", - "tt7085842", - "tt8465676", - "tt0118750", - "tt3130406", - "tt2933794", - "tt6646998", - "tt7308086", - "tt6699860", - "tt10835790", - "tt3194590", - "tt6373616", - "tt1202579", - "tt3494584", - "tt1015999", - "tt4647788", - "tt8558596", - "tt1705977", - "tt0018526", - "tt6193408", - "tt1847731", - "tt6035294", - "tt6222286", - "tt3240752", - "tt0067961", - "tt3741150", - "tt6651118", - "tt0114787", - "tt2208144", - "tt0079095", - "tt0014142", - "tt0024844", - "tt0106305", - "tt0019071", - "tt1956669", - "tt0367089", - "tt0017075", - "tt0042643", - "tt0342492", - "tt1255953", - "tt0087884", - "tt0086589", - "tt4527430", - "tt0018839", - "tt0107175", - "tt0047101", - "tt0041796", - "tt0015175", - "tt0103186", - "tt0077427", - "tt0418455", - "tt7073522", - "tt2008006", - "tt0038522", - "tt6927316", - "tt0015174", - "tt0097216", - "tt8731042", - "tt0187350", - "tt4516162", - "tt7224328", - "tt1064215", - "tt0292886", - "tt7776030", - "tt1859446", - "tt4777008", - "tt4389006", - "tt8956390", - "tt5862338", - "tt2903370", - "tt1548542", - "tt9584906", - "tt3985616", - "tt8185182", - "tt2132504", - "tt8811474", - "tt7733426", - "tt7943248", - "tt0088814", - "tt11668444", - "tt0304669", - "tt0465234", - "tt0452681", - "tt0100967", - "tt0210945", - "tt5452780", - "tt0089167", - "tt0102167", - "tt0180020", - "tt0072991", - "tt0107664", - "tt0117550", - "tt0037168", - "tt0185429", - "tt6520634", - "tt0037303", - "tt6525872", - "tt0099901", - "tt7297472", - "tt6207236", - "tt6449908", - "tt7184124", - "tt0107057", - "tt8978846", - "tt0043832", - "tt1209367", - "tt3847642", - "tt0096236", - "tt7016522", - "tt4788744", - "tt8385108", - "tt6986606", - "tt2925410", - "tt5536610", - "tt0117891", - "tt3809276", - "tt2252038", - "tt2244222", - "tt0165874", - "tt3150796", - "tt3591436", - "tt2493210", - "tt1591071", - "tt2400435", - "tt2273720", - "tt0182789", - "tt5723416", - "tt7280898", - "tt0415978", - "tt2226050", - "tt5116302", - "tt6611950", - "tt6856186", - "tt3683398", - "tt5979690", - "tt2752724", - "tt5290882", - "tt6114234", - "tt6198246", - "tt2693580", - "tt6328086", - "tt8865580", - "tt2193456", - "tt0138590", - "tt1646877", - "tt0428865", - "tt1025100", - "tt5717194", - "tt3576038", - "tt7830574", - "tt1626637", - "tt2449564", - "tt9711106", - "tt6090044", - "tt1893186", - "tt8983138", - "tt8652584", - "tt3359730", - "tt2845514", - "tt7248518", - "tt9753018", - "tt10964346", - "tt4083682", - "tt10964186", - "tt6980988", - "tt7444706", - "tt6173902", - "tt7990532", - "tt8791968", - "tt6409856", - "tt6099438", - "tt7278702", - "tt0206216", - "tt4682562", - "tt5031388", - "tt9052266", - "tt0081501", - "tt7390080", - "tt5957544", - "tt0094627", - "tt0192788", - "tt3499286", - "tt0107120", - "tt6042334", - "tt6318954", - "tt7678408", - "tt6910006", - "tt10817348", - "tt2584384", - "tt3735216", - "tt6023650", - "tt3921854", - "tt3528574", - "tt7122106", - "tt2277946", - "tt2153416", - "tt2035535", - "tt2734818", - "tt6194978", - "tt6051412", - "tt2450366", - "tt3417866", - "tt4758818", - "tt1863441", - "tt2380029", - "tt1876248", - "tt1517626", - "tt4158590", - "tt2390275", - "tt10305932", - "tt2865380", - "tt6680858", - "tt5480340", - "tt7422822", - "tt4325356", - "tt7057376", - "tt1458397", - "tt3654026", - "tt7309512", - "tt4135218", - "tt5937996", - "tt4357624", - "tt6836406", - "tt3615814", - "tt7239400", - "tt6171672", - "tt3056202", - "tt4807552", - "tt0048764", - "tt3631284", - "tt0055031", - "tt6367782", - "tt1823744", - "tt0249218", - "tt0275225", - "tt2153198", - "tt8019694", - "tt0040970", - "tt1727596", - "tt2850480", - "tt1640605", - "tt1082863", - "tt3220890", - "tt7890274", - "tt2027215", - "tt7615436", - "tt7939428", - "tt9738400", - "tt2354012", - "tt4448304", - "tt1231597", - "tt4460122", - "tt4949162", - "tt1552111", - "tt5101878", - "tt3347518", - "tt3766040", - "tt5472896", - "tt0110966", - "tt3960584", - "tt0249378", - "tt4067578", - "tt1665799", - "tt5974626", - "tt4454834", - "tt5823326", - "tt2711672", - "tt0439544", - "tt4835894", - "tt3212380", - "tt5717184", - "tt4896904", - "tt1855977", - "tt0102202", - "tt3763866", - "tt8883164", - "tt3762766", - "tt1669818", - "tt4853120", - "tt8634256", - "tt4007320", - "tt2836166", - "tt5814512", - "tt2854692", - "tt2827058", - "tt3647328", - "tt6205542", - "tt2184552", - "tt4485806", - "tt0162907", - "tt1314269", - "tt3153634", - "tt3086582", - "tt4958448", - "tt0485061", - "tt3043630", - "tt6122306", - "tt4920274", - "tt7191910", - "tt6908536", - "tt4584814", - "tt0057546", - "tt8119844", - "tt7948854", - "tt2827708", - "tt0056353", - "tt8688634", - "tt2076298", - "tt2291904", - "tt9778190", - "tt1714850", - "tt9735672", - "tt7295568", - "tt0910873", - "tt9038304", - "tt2451110", - "tt7502322", - "tt9135722", - "tt1869470", - "tt7707988", - "tt8543470", - "tt1418353", - "tt8860946", - "tt9501310", - "tt3631298", - "tt5599876", - "tt9261594", - "tt5344876", - "tt3469718", - "tt0290014", - "tt3646592", - "tt7255374", - "tt0386108", - "tt7469672", - "tt5156274", - "tt1514044", - "tt3485800", - "tt5319866", - "tt7308198", - "tt0110399", - "tt2073661", - "tt3057572", - "tt8339704", - "tt0362590", - "tt0192071", - "tt4727010", - "tt6137494", - "tt1781777", - "tt5678732", - "tt2492002", - "tt0119843", - "tt11421870", - "tt4697228", - "tt0379380", - "tt2635824", - "tt1336106", - "tt4686108", - "tt0148421", - "tt4299774", - "tt0445620", - "tt5691084", - "tt0460811", - "tt6156656", - "tt4056574", - "tt1380151", - "tt4229864", - "tt3766382", - "tt0456145", - "tt1330018", - "tt5201882", - "tt6205996", - "tt2136972", - "tt5607782", - "tt3180548", - "tt4254562", - "tt8637922", - "tt1091863", - "tt0122529", - "tt9853686", - "tt2488496", - "tt0121765", - "tt0787462", - "tt11321468", - "tt7549884", - "tt6445414", - "tt6044156", - "tt0105428", - "tt0120915", - "tt0110613", - "tt0079813", - "tt0084695", - "tt3713030", - "tt1798291", - "tt6492186", - "tt5474522", - "tt0096118", - "tt0082431", - "tt0086143", - "tt4365566", - "tt2490432", - "tt1112120", - "tt4038806", - "tt0108137", - "tt6964966", - "tt7379330", - "tt5924114", - "tt6840554", - "tt8597286", - "tt2378145", - "tt0116920", - "tt8539512", - "tt5116504", - "tt3294664", - "tt3519772", - "tt2935390", - "tt5893032", - "tt2179237", - "tt1401621", - "tt6241678", - "tt3252594", - "tt3173758", - "tt6456768", - "tt5216022", - "tt4694366", - "tt5841088", - "tt6445922", - "tt2469760", - "tt3455224", - "tt6851066", - "tt6384998", - "tt4058012", - "tt4851570", - "tt7676992", - "tt5129674", - "tt3285740", - "tt4323536", - "tt3368814", - "tt6106980", - "tt4247440", - "tt1906384", - "tt6519912", - "tt6023386", - "tt5207320", - "tt6673612", - "tt7631320", - "tt9426212", - "tt8000718", - "tt5670842", - "tt8151874", - "tt10370380", - "tt0078740", - "tt0068505", - "tt8236398", - "tt6964562", - "tt0071110", - "tt0052832", - "tt0046358", - "tt7025388", - "tt3224458", - "tt0031804", - "tt3842684", - "tt0049042", - "tt0082966", - "tt11388406", - "tt7095476", - "tt0365617", - "tt5257554", - "tt0234137", - "tt1814727", - "tt2219214", - "tt1125188", - "tt1504397", - "tt5105666", - "tt5075328", - "tt2182256", - "tt3828858", - "tt4329394", - "tt5719076", - "tt6883152", - "tt5879216", - "tt2375443", - "tt8110966", - "tt3485754", - "tt1753449", - "tt8841148", - "tt0098412", - "tt2399648", - "tt3672120", - "tt1039915", - "tt0096074", - "tt5013782", - "tt4170344", - "tt3596842", - "tt2348880", - "tt0486569", - "tt1017465", - "tt0325980", - "tt6404142", - "tt3257550", - "tt1298650", - "tt7014430", - "tt5686062", - "tt0449088", - "tt0383574", - "tt9129406", - "tt6841812", - "tt5690472", - "tt8855852", - "tt5115546", - "tt9170352", - "tt1341718", - "tt4431254", - "tt5076150", - "tt1461698", - "tt2155259", - "tt3014262", - "tt7575660", - "tt8660492", - "tt7831358", - "tt3210258", - "tt1289403", - "tt0082782", - "tt3983738", - "tt5848416", - "tt7193362", - "tt6664120", - "tt0056105", - "tt9206562", - "tt0425326", - "tt9143942", - "tt0089222", - "tt4621256", - "tt7738490", - "tt0424228", - "tt0077241", - "tt4146132", - "tt4563460", - "tt6324278", - "tt0181838", - "tt3760974", - "tt1623745", - "tt4587780", - "tt0461694", - "tt2377752", - "tt5569618", - "tt0191191", - "tt1564571", - "tt6302296", - "tt0036342", - "tt6141048", - "tt3653650", - "tt4250960", - "tt3856300", - "tt2153394", - "tt3163244", - "tt6507954", - "tt0040746", - "tt7672714", - "tt5780484", - "tt3111306", - "tt0422309", - "tt5193408", - "tt6736282", - "tt5340626", - "tt7155576", - "tt3973036", - "tt0035279", - "tt5696326", - "tt6318238", - "tt2516424", - "tt7623988", - "tt5253282", - "tt0315273", - "tt5651458", - "tt0119887", - "tt2179231", - "tt3664992", - "tt1640483", - "tt4421800", - "tt7527912", - "tt5496244", - "tt5973658", - "tt6209960", - "tt6856134", - "tt9038976", - "tt4717208", - "tt4888576", - "tt6772700", - "tt4210934", - "tt3587396", - "tt2514298", - "tt0086190", - "tt0073640", - "tt5471472", - "tt0093051", - "tt0076759", - "tt0147599", - "tt0239948", - "tt5598206", - "tt2184398", - "tt10218674", - "tt3700594", - "tt3823826", - "tt8861786", - "tt6333066", - "tt7217214", - "tt4427060", - "tt1999192", - "tt5288532", - "tt8010354", - "tt8259682", - "tt6290202", - "tt1714196", - "tt1822311", - "tt3481000", - "tt2112999", - "tt5313016", - "tt8005338", - "tt9810420", - "tt3748528", - "tt2292903", - "tt8649186", - "tt0436613", - "tt8380776", - "tt0080684", - "tt0051564", - "tt1502714", - "tt0086310", - "tt0077679", - "tt1223934", - "tt0094374", - "tt6675244", - "tt5176832", - "tt2728984", - "tt0018737", - "tt0019933", - "tt0080658", - "tt0058604", - "tt5911032", - "tt6885502", - "tt5873100", - "tt0093215", - "tt2094195", - "tt0110300", - "tt2087982", - "tt6069126", - "tt7656570", - "tt0770748", - "tt7427356", - "tt4708300", - "tt5032468", - "tt5565806", - "tt4797490", - "tt2481512", - "tt6503230", - "tt3274704", - "tt3562370", - "tt4970294", - "tt3061222", - "tt1753821", - "tt3424914", - "tt5945724", - "tt7216586", - "tt0109480", - "tt4177822", - "tt1786462", - "tt2212778", - "tt3868978", - "tt4082482", - "tt2181282", - "tt1526745", - "tt5718046", - "tt1249439", - "tt4938588", - "tt0199290", - "tt4602074", - "tt0281865", - "tt7039000", - "tt4966046", - "tt6034774", - "tt0319524", - "tt0090956", - "tt6524170", - "tt7078922", - "tt3305176", - "tt4763168", - "tt4503112", - "tt6603378", - "tt2636480", - "tt0472562", - "tt0332136", - "tt1787731", - "tt6155172", - "tt0113729", - "tt9541486", - "tt1311093", - "tt8887784", - "tt6395680", - "tt6140148", - "tt7314630", - "tt5822132", - "tt0058083", - "tt5974030", - "tt0114697", - "tt5367690", - "tt6076208", - "tt3188048", - "tt0191754", - "tt4433360", - "tt7671064", - "tt0365270", - "tt6141246", - "tt1984177", - "tt0048198", - "tt0039090", - "tt0099581", - "tt9882084", - "tt0467426", - "tt1204979", - "tt0138797", - "tt0878652", - "tt0240119", - "tt0080850", - "tt7243754", - "tt0215135", - "tt0382943", - "tt0096875", - "tt0382019", - "tt2955096", - "tt1219820", - "tt8652728", - "tt5904182", - "tt0119709", - "tt4906686", - "tt9652782", - "tt0101507", - "tt0103872", - "tt9198724", - "tt2343549", - "tt1950186", - "tt0109835", - "tt2783020", - "tt5119264", - "tt2946498", - "tt0096405", - "tt0109575", - "tt0037801", - "tt2597760", - "tt6814106", - "tt3120484", - "tt3900796", - "tt7631792", - "tt5090750", - "tt6357074", - "tt4178020", - "tt2503954", - "tt4797436", - "tt6958520", - "tt5066574", - "tt3350376", - "tt2413914", - "tt4387314", - "tt2931376", - "tt2292196", - "tt2392383", - "tt3109188", - "tt5191758", - "tt0100480", - "tt4280540", - "tt7104950", - "tt2330973", - "tt2515242", - "tt1800240", - "tt4552514", - "tt9201634", - "tt0876154", - "tt2197963", - "tt5523004", - "tt4743562", - "tt1701176", - "tt0843353", - "tt3212910", - "tt1858739", - "tt0835802", - "tt4717422", - "tt7038606", - "tt0494746", - "tt4229578", - "tt3645178", - "tt7738550", - "tt7073350", - "tt6406848", - "tt6705838", - "tt7539884", - "tt9358052", - "tt4538632", - "tt2530756", - "tt5178348", - "tt8466562", - "tt1146431", - "tt1447800", - "tt3349578", - "tt5829104", - "tt7364706", - "tt4192066", - "tt10584272", - "tt11274306", - "tt9174334", - "tt3092208", - "tt0082415", - "tt10375886", - "tt0059541", - "tt2634584", - "tt0079083", - "tt1637612", - "tt0067815", - "tt6062774", - "tt0087282", - "tt11379262", - "tt2218080", - "tt3587890", - "tt3649942", - "tt8324462", - "tt0108334", - "tt0038360", - "tt2259122", - "tt5069086", - "tt5498536", - "tt2658192", - "tt7805064", - "tt7736664", - "tt2934844", - "tt6290736", - "tt9369332", - "tt0070212", - "tt5516404", - "tt3689908", - "tt0115643", - "tt2357011", - "tt3593626", - "tt2662218", - "tt1727253", - "tt4513538", - "tt5646992", - "tt3920890", - "tt7130740", - "tt3879074", - "tt4637240", - "tt0116621", - "tt5977536", - "tt0102065", - "tt3863632", - "tt0373416", - "tt6627466", - "tt5634406", - "tt5887650", - "tt3458760", - "tt6237208", - "tt0111704", - "tt4692656", - "tt4149656", - "tt2177228", - "tt3180154", - "tt7237666", - "tt1402213", - "tt4669278", - "tt3063462", - "tt3721602", - "tt6509862", - "tt7178226", - "tt6970616", - "tt0095654", - "tt4264610", - "tt4672272", - "tt5189770", - "tt5898630", - "tt0437503", - "tt4922524", - "tt0465417", - "tt4048628", - "tt2015478", - "tt3186552", - "tt5812510", - "tt3319158", - "tt2049448", - "tt8297300", - "tt1077394", - "tt6762684", - "tt3149900", - "tt2385752", - "tt6079060", - "tt4030560", - "tt5371832", - "tt1206885", - "tt0117407", - "tt0829193", - "tt2642226", - "tt0825283", - "tt1800379", - "tt1780790", - "tt7924798", - "tt5200506", - "tt6495094", - "tt0171227", - "tt5687814", - "tt0117495", - "tt4177498", - "tt4134826", - "tt3074694", - "tt4066000", - "tt0079073", - "tt3733606", - "tt0109254", - "tt0092644", - "tt6353036", - "tt6213952", - "tt5803438", - "tt4255274", - "tt5656126", - "tt3813094", - "tt3809960", - "tt6960220", - "tt0067341", - "tt0481273", - "tt5988216", - "tt7971048", - "tt0086960", - "tt1340425", - "tt2400407", - "tt0044982", - "tt6563012", - "tt4146350", - "tt6488382", - "tt4521686", - "tt0093171", - "tt0177507", - "tt0081286", - "tt0101492", - "tt0093671", - "tt3273434", - "tt0093347", - "tt2763746", - "tt4085456", - "tt4824316", - "tt2530452", - "tt0059837", - "tt0079372", - "tt3422622", - "tt5233558", - "tt4368038", - "tt7027566", - "tt3779382", - "tt8262802", - "tt4444438", - "tt7657972", - "tt1707387", - "tt0084259", - "tt0315312", - "tt9109278", - "tt1476425", - "tt2464812", - "tt1352771", - "tt7222290", - "tt2145637", - "tt0391890", - "tt5950092", - "tt0104526", - "tt5646604", - "tt5051826", - "tt2987806", - "tt2381213", - "tt0467421", - "tt4329806", - "tt7949046", - "tt2993674", - "tt4874350", - "tt6900380", - "tt6849128", - "tt4831810", - "tt1727362", - "tt1891770", - "tt7575400", - "tt0362001", - "tt3844084", - "tt7952840", - "tt3722248", - "tt5205210", - "tt4593196", - "tt2282628", - "tt2063015", - "tt5945946", - "tt8773700", - "tt2076862", - "tt3089272", - "tt4441150", - "tt3496892", - "tt4843358", - "tt4671002", - "tt1687861", - "tt4173306", - "tt8911030", - "tt6164762", - "tt5834278", - "tt7128608", - "tt6371588", - "tt3665760", - "tt4394104", - "tt0102432", - "tt4741768", - "tt5896568", - "tt4010862", - "tt2536846", - "tt4572984", - "tt4044896", - "tt3107166", - "tt6794448", - "tt4864584", - "tt3326892", - "tt7924808", - "tt0097886", - "tt3620120", - "tt0411265", - "tt2525342", - "tt5275128", - "tt7109844", - "tt0105597", - "tt1466054", - "tt1537196", - "tt10380066", - "tt1418757", - "tt7309430", - "tt0043724", - "tt3282858", - "tt6156138", - "tt7493366", - "tt4711724", - "tt1127881", - "tt1843171", - "tt11388580", - "tt0224421", - "tt0074512", - "tt7418824", - "tt7090140", - "tt4346050", - "tt5531298", - "tt1472460", - "tt6456614", - "tt7019560", - "tt2554842", - "tt0049470", - "tt6176138", - "tt2401752", - "tt1588878", - "tt3172126", - "tt0100330", - "tt2012062", - "tt6540984", - "tt0103978", - "tt0120392", - "tt2784020", - "tt2177368", - "tt6688304", - "tt5728684", - "tt0103039", - "tt3973012", - "tt6149802", - "tt3978358", - "tt3709746", - "tt1558259", - "tt2306441", - "tt1826780", - "tt3326096", - "tt4588594", - "tt6218440", - "tt5698320", - "tt4424722", - "tt0109730", - "tt3515318", - "tt9426852", - "tt3890902", - "tt10800758", - "tt4542726", - "tt2088745", - "tt7385782", - "tt1343371", - "tt1877893", - "tt1245734", - "tt6852284", - "tt0166110", - "tt0212380", - "tt5478918", - "tt4894198", - "tt7099566", - "tt2027091", - "tt4881364", - "tt4497978", - "tt3891338", - "tt0828393", - "tt6953896", - "tt3334418", - "tt3538666", - "tt4926656", - "tt6069162", - "tt1320373", - "tt0231448", - "tt8499212", - "tt5822712", - "tt0116471", - "tt11611314", - "tt0308878", - "tt2224966", - "tt0076069", - "tt5228262", - "tt8991200", - "tt3180402", - "tt0065112", - "tt1948079", - "tt0443474", - "tt0068611", - "tt4440114", - "tt7408776", - "tt7134522", - "tt4289298", - "tt5214752", - "tt2393730", - "tt0807747", - "tt4827420", - "tt1213672", - "tt7329810", - "tt6950594", - "tt8219526", - "tt2852460", - "tt5998744", - "tt3482000", - "tt6323858", - "tt7155178", - "tt4657280", - "tt5846628", - "tt0120353", - "tt3986108", - "tt2294679", - "tt6495526", - "tt4648732", - "tt0250687", - "tt4623856", - "tt2375844", - "tt7819860", - "tt0109368", - "tt1379197", - "tt4111826", - "tt4215674", - "tt0251191", - "tt3985516", - "tt3350996", - "tt1950135", - "tt6267964", - "tt2106616", - "tt4561402", - "tt2009432", - "tt8275670", - "tt1905071", - "tt1097636", - "tt6438840", - "tt5224356", - "tt5865046", - "tt6998650", - "tt2370228", - "tt3717316", - "tt2980554", - "tt0114117", - "tt0415141", - "tt1980085", - "tt3027188", - "tt5542878", - "tt2989524", - "tt0106408", - "tt0251005", - "tt6212020", - "tt1928334", - "tt6113122", - "tt7472352", - "tt3226454", - "tt3762834", - "tt2382622", - "tt4160132", - "tt3630800", - "tt7580076", - "tt3693042", - "tt9602666", - "tt0398872", - "tt5848640", - "tt1326219", - "tt5579982", - "tt3924774", - "tt3303020", - "tt3476464", - "tt2275471", - "tt5302658", - "tt3302092", - "tt6028556", - "tt4353376", - "tt9625664", - "tt6966044", - "tt8638420", - "tt1477834", - "tt8623904", - "tt0179148", - "tt7285748", - "tt3881680", - "tt0140767", - "tt7427130", - "tt2836628", - "tt2187322", - "tt4181270", - "tt3752902", - "tt0191655", - "tt1287876", - "tt6688354", - "tt5565254", - "tt1918924", - "tt1410205", - "tt6243274", - "tt3634908", - "tt0462346", - "tt1397502", - "tt6516590", - "tt5579356", - "tt3625136", - "tt3189648", - "tt3773210", - "tt6281242", - "tt0112732", - "tt6043072", - "tt5807628", - "tt6089700", - "tt7130860", - "tt4494094", - "tt4461014", - "tt1878932", - "tt1880415", - "tt2782692", - "tt0160356", - "tt1067773", - "tt1072755", - "tt4187786", - "tt7681970", - "tt2186712", - "tt3843514", - "tt5060166", - "tt0061107", - "tt0765465", - "tt0058329", - "tt6511760", - "tt0907676", - "tt1264906", - "tt2836376", - "tt3289080", - "tt4917224", - "tt0088454", - "tt2075292", - "tt7681868", - "tt4007068", - "tt2118727", - "tt4364338", - "tt1338590", - "tt9288776", - "tt0239496", - "tt0307568", - "tt2513616", - "tt6391282", - "tt11172926", - "tt2413958", - "tt11076480", - "tt2137992", - "tt11518196", - "tt10564446", - "tt9552162", - "tt8353934", - "tt10655652", - "tt0783640", - "tt0043459", - "tt7299298", - "tt0084904", - "tt3309874", - "tt7145708", - "tt7049272", - "tt7087674", - "tt0087795", - "tt8726180", - "tt0054215", - "tt4947738", - "tt0056869", - "tt9134216", - "tt7066546", - "tt0100050", - "tt7293920", - "tt6910380", - "tt5606664", - "tt1570337", - "tt1295093", - "tt3735332", - "tt3059576", - "tt0091836", - "tt4437216", - "tt1934452", - "tt4514646", - "tt7406704", - "tt0101783", - "tt2633014", - "tt2950434", - "tt2912776", - "tt5116248", - "tt5537140", - "tt2901006", - "tt4960764", - "tt0454962", - "tt4856508", - "tt1614430", - "tt5644050", - "tt0115837", - "tt2343601", - "tt1821701", - "tt0101444", - "tt3118920", - "tt5839116", - "tt2147728", - "tt1659192", - "tt1332009", - "tt6388844", - "tt0097244", - "tt2082289", - "tt1183727", - "tt1378238", - "tt4738802", - "tt2406306", - "tt6623390", - "tt3216846", - "tt7858466", - "tt5086046", - "tt3898776", - "tt0784972", - "tt7215388", - "tt3877344", - "tt4513560", - "tt2782868", - "tt1669768", - "tt7493274", - "tt5039994", - "tt1616543", - "tt1049405", - "tt0082095", - "tt9546624", - "tt0072717", - "tt0159443", - "tt0064148", - "tt0093870", - "tt8801584", - "tt7008310", - "tt1467388", - "tt0101763", - "tt0240880", - "tt7818580", - "tt3181588", - "tt6165792", - "tt5563334", - "tt11488724", - "tt3863542", - "tt7802246", - "tt3292080", - "tt1129441", - "tt0092710", - "tt5777802", - "tt5592256", - "tt7465694", - "tt3587064", - "tt11361808", - "tt4624258", - "tt1757927", - "tt1839482", - "tt5524630", - "tt1865573", - "tt1811307", - "tt0052357", - "tt6150962", - "tt3214448", - "tt3361004", - "tt7945098", - "tt7209220", - "tt3579842", - "tt5350512", - "tt1838601", - "tt1791611", - "tt4762592", - "tt2445568", - "tt5195828", - "tt4688294", - "tt2140577", - "tt0085994", - "tt7718636", - "tt3881768", - "tt5521550", - "tt2781612", - "tt2987718", - "tt0088008", - "tt6109874", - "tt4818168", - "tt0263467", - "tt4645358", - "tt4442604", - "tt0166219", - "tt4720596", - "tt7481192", - "tt4568466", - "tt4746102", - "tt6792478", - "tt0196223", - "tt2523096", - "tt6354056", - "tt1410068", - "tt6503354", - "tt4667832", - "tt4837126", - "tt3109072", - "tt5940448", - "tt7647840", - "tt1282142", - "tt1849868", - "tt6150942", - "tt8733014", - "tt0042176", - "tt2816628", - "tt0067595", - "tt5208130", - "tt0077729", - "tt5864238", - "tt0076460", - "tt5675746", - "tt1972766", - "tt0039438", - "tt1584824", - "tt8649636", - "tt1584807", - "tt7967412", - "tt7738048", - "tt0026737", - "tt0047232", - "tt7736478", - "tt0027164", - "tt0032655", - "tt5287914", - "tt0037678", - "tt0027796", - "tt0109440", - "tt0070746", - "tt0041527", - "tt0030066", - "tt0044379", - "tt0036581", - "tt0057541", - "tt0107413", - "tt3759434", - "tt1843303", - "tt0050894", - "tt1776305", - "tt5913968", - "tt0108169", - "tt1426328", - "tt1773690", - "tt2224509", - "tt2989350", - "tt0122338", - "tt0082685", - "tt0138563", - "tt2133243", - "tt8579674", - "tt5873672", - "tt0120389", - "tt5811154", - "tt0110054", - "tt1629762", - "tt3787068", - "tt7218564", - "tt0120813", - "tt1737755", - "tt3781762", - "tt6212210", - "tt5577390", - "tt0417614", - "tt4312882", - "tt2057920", - "tt4405532", - "tt4227204", - "tt5033018", - "tt3130302", - "tt4318696", - "tt5143770", - "tt3207376", - "tt2281317", - "tt7520216", - "tt7304212", - "tt5034122", - "tt1690967", - "tt5653444", - "tt2523756", - "tt3217994", - "tt4566780", - "tt3400058", - "tt3415358", - "tt5936582", - "tt7966994", - "tt2587914", - "tt5142898", - "tt2142987", - "tt1541149", - "tt2190451", - "tt1260704", - "tt5985672", - "tt3394972", - "tt3059046", - "tt0073624", - "tt3484728", - "tt1690542", - "tt11615634", - "tt5459324", - "tt2977158", - "tt1934472", - "tt3510678", - "tt0117898", - "tt8954890", - "tt2084784", - "tt3333864", - "tt2459072", - "tt1935093", - "tt4510896", - "tt3780688", - "tt6740608", - "tt6245540", - "tt6773288", - "tt3826866", - "tt5329134", - "tt7165808", - "tt11082512", - "tt6188002", - "tt7440432", - "tt6920766", - "tt5477402", - "tt0089731", - "tt3438208", - "tt4971346", - "tt2846378", - "tt9357404", - "tt4712516", - "tt6253522", - "tt3953944", - "tt2552666", - "tt4875962", - "tt1826813", - "tt3276632", - "tt3561236", - "tt8976608", - "tt3887208", - "tt4907976", - "tt7610196", - "tt2298186", - "tt4447518", - "tt6603860", - "tt6563576", - "tt1823684", - "tt0036613", - "tt0483812", - "tt1598778", - "tt0030241", - "tt5833658", - "tt4678298", - "tt1879066", - "tt11422214", - "tt0106473", - "tt0393109", - "tt3108570", - "tt4426464", - "tt5007774", - "tt2073600", - "tt2219772", - "tt0481583", - "tt4505666", - "tt1943696", - "tt2716576", - "tt1958053", - "tt5959970", - "tt5791094", - "tt5891642", - "tt0070194", - "tt5222806", - "tt0488757", - "tt3110014", - "tt6107548", - "tt3472210", - "tt2281309", - "tt4471636", - "tt8185442", - "tt4533838", - "tt4360406", - "tt3216086", - "tt3501410", - "tt4074958", - "tt5293604", - "tt5261644", - "tt3896016", - "tt6738046", - "tt4828620", - "tt4296186", - "tt3280522", - "tt1626251", - "tt6207118", - "tt2012665", - "tt8185584", - "tt3876382", - "tt3560492", - "tt0105450", - "tt1411249", - "tt3564860", - "tt8278648", - "tt5457078", - "tt0106273", - "tt2395970", - "tt5369760", - "tt7039326", - "tt4160706", - "tt1337032", - "tt11023922", - "tt6185286", - "tt4893178", - "tt5485578", - "tt6266306", - "tt0109450", - "tt6673964", - "tt4172510", - "tt2093944", - "tt5363736", - "tt5181834", - "tt2231900", - "tt2481500", - "tt1018817", - "tt4034390", - "tt6215208", - "tt2362036", - "tt2926924", - "tt10883506", - "tt6149936", - "tt0194722", - "tt3715296", - "tt8678982", - "tt1587309", - "tt4362646", - "tt4247828", - "tt6333200", - "tt3499358", - "tt10731748", - "tt5969180", - "tt3098998", - "tt7144296", - "tt8668312", - "tt3727120", - "tt1662500", - "tt5809726", - "tt4791276", - "tt5690992", - "tt2914740", - "tt7444708", - "tt3447676", - "tt10525236", - "tt1956534", - "tt6638398", - "tt0100152", - "tt5038134", - "tt4394034", - "tt0113140", - "tt7430654", - "tt7547510", - "tt4396662", - "tt1242658", - "tt2359473", - "tt7557686", - "tt4625316", - "tt2361558", - "tt7419218", - "tt2375763", - "tt6032878", - "tt0289879", - "tt0064471", - "tt0047396", - "tt0139898", - "tt0084887", - "tt7364522", - "tt8170298", - "tt10297640", - "tt0048750", - "tt0090062", - "tt0035962", - "tt5884434", - "tt0242527", - "tt0103617", - "tt5697572", - "tt7587984", - "tt0052141", - "tt0053715", - "tt0032554", - "tt0102631", - "tt0058267", - "tt0079814", - "tt0095981", - "tt0074967", - "tt3276518", - "tt0399095", - "tt8484038", - "tt0093043", - "tt6147240", - "tt4196832", - "tt2974902", - "tt3220100", - "tt5106390", - "tt3289804", - "tt3449322", - "tt6333092", - "tt0053226", - "tt0367151", - "tt3704298", - "tt5716380", - "tt2822864", - "tt2786780", - "tt4250438", - "tt5716848", - "tt2246376", - "tt5637736", - "tt4162860", - "tt7406186", - "tt3835612", - "tt0303017", - "tt3986978", - "tt4560008", - "tt6354166", - "tt0480461", - "tt6172696", - "tt0094188", - "tt5582308", - "tt5896146", - "tt2659190", - "tt1648155", - "tt4526136", - "tt6963592", - "tt6933454", - "tt0331509", - "tt0119717", - "tt3081268", - "tt0120213", - "tt2014225", - "tt4047350", - "tt3007524", - "tt7544820", - "tt5002544", - "tt3496790", - "tt3449658", - "tt3234084", - "tt1376699", - "tt2762970", - "tt1059905", - "tt4687276", - "tt8583930", - "tt7494136", - "tt2385119", - "tt4274788", - "tt1842371", - "tt2089624", - "tt5321568", - "tt6185998", - "tt6077404", - "tt6345080", - "tt10011448", - "tt5938950", - "tt6233592", - "tt3595748", - "tt3174890", - "tt7230054", - "tt3813018", - "tt6644632", - "tt10010368", - "tt8942864", - "tt8910924", - "tt1773389", - "tt4994992", - "tt2535394", - "tt3416674", - "tt3474978", - "tt0455933", - "tt4575782", - "tt3532686", - "tt6015068", - "tt4590092", - "tt4633662", - "tt5673714", - "tt6962204", - "tt2487028", - "tt6182054", - "tt3854372", - "tt2556676", - "tt5278886", - "tt5156532", - "tt0401504", - "tt1762370", - "tt6898162", - "tt2524934", - "tt6061074", - "tt1244093", - "tt5167174", - "tt6912586", - "tt0473445", - "tt5260026", - "tt1137477", - "tt0415877", - "tt1267299", - "tt0472219", - "tt1951133", - "tt1414823", - "tt0317950", - "tt3118442", - "tt6842126", - "tt4374864", - "tt1977919", - "tt4392454", - "tt5179398", - "tt5868924", - "tt7400118", - "tt3076510", - "tt7521846", - "tt6676028", - "tt2515456", - "tt5030452", - "tt0035123", - "tt0052997", - "tt4648786", - "tt4691804", - "tt4916630", - "tt9450768", - "tt4000956", - "tt5593416", - "tt0385887", - "tt9814242", - "tt7590074", - "tt7493810", - "tt2604704", - "tt5025254", - "tt0190520", - "tt5894876", - "tt1222329", - "tt7058618", - "tt8571578", - "tt0112701", - "tt7637350", - "tt10711654", - "tt2769158", - "tt0303101", - "tt0101535", - "tt4191592", - "tt0080905", - "tt1583948", - "tt6985424", - "tt10378926", - "tt2271565", - "tt8140328", - "tt10238708", - "tt8498366", - "tt3219154", - "tt4060544", - "tt3278416", - "tt3731564", - "tt8555260", - "tt0070066", - "tt9161168", - "tt0034591", - "tt4940094", - "tt0285685", - "tt4991786", - "tt0078869", - "tt0026424", - "tt0089420", - "tt3102360", - "tt0055450", - "tt0075382", - "tt4746370", - "tt4147596", - "tt3090882", - "tt5639536", - "tt0770818", - "tt1942922", - "tt2338205", - "tt3621170", - "tt1746153", - "tt0434931", - "tt5526792", - "tt7656706", - "tt4297380", - "tt5791622", - "tt0791178", - "tt6323264", - "tt6582774", - "tt11274564", - "tt5907618", - "tt4704040", - "tt5798330", - "tt3270636", - "tt2083385", - "tt4631048", - "tt8688048", - "tt3253040", - "tt10319778", - "tt6769598", - "tt3763748", - "tt7783966", - "tt5539538", - "tt0080928", - "tt10806810", - "tt0221074", - "tt4121152", - "tt2352488", - "tt3993760", - "tt2318601", - "tt7248490", - "tt2190196", - "tt9810090", - "tt5486818", - "tt5741902", - "tt8014038", - "tt8516550", - "tt10150518", - "tt5672048", - "tt0088782", - "tt8332592", - "tt9397440", - "tt8667972", - "tt2973554", - "tt7612032", - "tt2461030", - "tt6818554", - "tt9419838", - "tt0091995", - "tt7246106", - "tt0351761", - "tt6538102", - "tt6927880", - "tt3886604", - "tt4350998", - "tt3103166", - "tt5815818", - "tt4711924", - "tt1334521", - "tt4872260", - "tt3878146", - "tt1491043", - "tt8716334", - "tt5544224", - "tt2293060", - "tt3480662", - "tt0901487", - "tt3012776", - "tt3415354", - "tt4508932", - "tt0324013", - "tt4177018", - "tt3722052", - "tt1037156", - "tt3315398", - "tt4002884", - "tt2421328", - "tt6411954", - "tt7476236", - "tt4499572", - "tt2481496", - "tt3923004", - "tt6020164", - "tt2374835", - "tt9311062", - "tt6197494", - "tt0125494", - "tt1998400", - "tt5183990", - "tt9313582", - "tt7149916", - "tt5087548", - "tt3103284", - "tt10795784", - "tt10667704", - "tt9028890", - "tt4723724", - "tt6149464", - "tt0298519", - "tt2405612", - "tt3369286", - "tt7654082", - "tt0056677", - "tt0111412", - "tt3347782", - "tt6634632", - "tt5629128", - "tt3169000", - "tt3893826", - "tt2132301", - "tt0060818", - "tt1515208", - "tt5786564", - "tt10061096", - "tt5118014", - "tt1861401", - "tt0415068", - "tt5182120", - "tt0447372", - "tt3828166", - "tt0111488", - "tt5869644", - "tt5919064", - "tt6654090", - "tt5105784", - "tt1567344", - "tt8168884", - "tt1787810", - "tt9093130", - "tt3729394", - "tt6483026", - "tt2988226", - "tt3078752", - "tt8115474", - "tt7573824", - "tt6048414", - "tt7984130", - "tt2395228", - "tt8844044", - "tt7252918", - "tt4460624", - "tt3921454", - "tt5598160", - "tt0060740", - "tt0086265", - "tt5699126", - "tt8255490", - "tt5113028", - "tt0031309", - "tt5320612", - "tt0076432", - "tt0062981", - "tt6585674", - "tt0116596", - "tt10540628", - "tt2731436", - "tt7021536", - "tt7907714", - "tt6425474", - "tt5212122", - "tt0090637", - "tt0058780", - "tt8399690", - "tt6450804", - "tt7080138", - "tt4819560", - "tt0081249", - "tt0050235", - "tt3872958", - "tt0061401", - "tt5180618", - "tt4061360", - "tt4162440", - "tt5843056", - "tt4161396", - "tt3512072", - "tt8094980", - "tt7155170", - "tt5456436", - "tt4949100", - "tt5180856", - "tt0076489", - "tt6835804", - "tt2963974", - "tt3784160", - "tt4057142", - "tt2708764", - "tt3635788", - "tt6782708", - "tt1278153", - "tt4490654", - "tt4765870", - "tt0397401", - "tt5428662", - "tt5039242", - "tt7334352", - "tt8019044", - "tt4887028", - "tt4363250", - "tt2262518", - "tt3856042", - "tt5613902", - "tt5929538", - "tt0098153", - "tt11368116", - "tt1690545", - "tt5706876", - "tt2276000", - "tt2674430", - "tt4942478", - "tt3862762", - "tt5687424", - "tt1720621", - "tt3904272", - "tt1146283", - "tt6398360", - "tt6421118", - "tt4524418", - "tt3546802", - "tt2966754", - "tt3074546", - "tt5874752", - "tt1065060", - "tt6323306", - "tt3693492", - "tt4529524", - "tt5716280", - "tt5973364", - "tt4843208", - "tt6357202", - "tt4768592", - "tt2175470", - "tt9651918", - "tt2226630", - "tt5321088", - "tt5117484", - "tt1942913", - "tt0322282", - "tt4929720", - "tt2737310", - "tt3804448", - "tt10551420", - "tt7575410", - "tt3904986", - "tt10218664", - "tt5679554", - "tt10726604", - "tt4705740", - "tt3396208", - "tt5247026", - "tt5647250", - "tt6459382", - "tt3647110", - "tt0106613", - "tt3418424", - "tt2404465", - "tt5347122", - "tt5555174", - "tt9722848", - "tt6578228", - "tt2660118", - "tt1155630", - "tt7398750", - "tt3671086", - "tt4557956", - "tt0870204", - "tt3685328", - "tt2190492", - "tt2651724", - "tt3359650", - "tt7913394", - "tt4986754", - "tt0103204", - "tt4574654", - "tt1785288", - "tt3057428", - "tt0377992", - "tt5244974", - "tt3530896", - "tt0054412", - "tt5212918", - "tt0100867", - "tt7528150", - "tt0096379", - "tt0076659", - "tt0063571", - "tt0053183", - "tt8310062", - "tt8894018", - "tt2118694", - "tt0054416", - "tt0117608", - "tt4415016", - "tt6964844", - "tt7624932", - "tt4430992", - "tt4396042", - "tt0161010", - "tt6823246", - "tt8851630", - "tt6916872", - "tt5495792", - "tt6721358", - "tt0021750", - "tt5659172", - "tt5238370", - "tt3853452", - "tt5097504", - "tt2013299", - "tt3357178", - "tt5937210", - "tt4473370", - "tt1736552", - "tt0067162", - "tt11433098", - "tt10442360", - "tt2952602", - "tt7535580", - "tt0228493", - "tt0441897", - "tt5952306", - "tt8746192", - "tt5368108", - "tt2709740", - "tt5803492", - "tt4254746", - "tt1793281", - "tt4237208", - "tt2304459", - "tt3574616", - "tt1930322", - "tt3856408", - "tt1832354", - "tt0287934", - "tt4767526", - "tt4952982", - "tt4654472", - "tt4620298", - "tt1786551", - "tt10499426", - "tt9182202", - "tt0097778", - "tt2247816", - "tt7989520", - "tt2463524", - "tt3469330", - "tt0460721", - "tt5723720", - "tt3758334", - "tt8501318", - "tt2815138", - "tt3549566", - "tt10756134", - "tt4020048", - "tt5832906", - "tt1217613", - "tt10499260", - "tt7512632", - "tt5742374", - "tt7923350", - "tt3124680", - "tt7973342", - "tt2340426", - "tt1398028", - "tt10402510", - "tt8845046", - "tt11124992", - "tt11390036", - "tt4549224", - "tt9799992", - "tt9018916", - "tt4742274", - "tt8316568", - "tt9597190", - "tt4354756", - "tt10332854", - "tt7827042", - "tt6341066", - "tt6469344", - "tt8778658", - "tt4801232", - "tt6598072", - "tt3991052", - "tt0167360", - "tt5817022", - "tt6145764", - "tt1095442", - "tt4797160", - "tt0081268", - "tt1063336", - "tt1464606", - "tt3800222", - "tt0149215", - "tt5815858", - "tt4058368", - "tt2231138", - "tt3779414", - "tt7253506", - "tt7192766", - "tt1863173", - "tt3722062", - "tt2215489", - "tt3307852", - "tt2081348", - "tt5903926", - "tt6191390", - "tt2927212", - "tt2091288", - "tt6247064", - "tt3188492", - "tt4282872", - "tt6148766", - "tt1511514", - "tt1959347", - "tt6193470", - "tt4614330", - "tt7679532", - "tt3278988", - "tt5028822", - "tt2366596", - "tt5014528", - "tt7450356", - "tt6881740", - "tt8291806", - "tt5009014", - "tt2797352", - "tt0115693", - "tt0312700", - "tt6029106", - "tt3449006", - "tt0356764", - "tt0118691", - "tt2236686", - "tt7116478", - "tt5371408", - "tt5503512", - "tt5820812", - "tt1655461", - "tt3750238", - "tt3583382", - "tt2558996", - "tt1294144", - "tt0110818", - "tt6671850", - "tt3946960", - "tt3865718", - "tt1509125", - "tt5145662", - "tt3171176", - "tt2241471", - "tt5046632", - "tt2375585", - "tt4126694", - "tt0087452", - "tt6504538", - "tt6294226", - "tt3559180", - "tt0077687", - "tt5432114", - "tt6093618", - "tt7315526", - "tt1283906", - "tt0058917", - "tt2942016", - "tt0049035", - "tt4562728", - "tt8299778", - "tt2265431", - "tt9109620", - "tt4197642", - "tt7732122", - "tt4882174", - "tt3799926", - "tt5810368", - "tt2113683", - "tt5575364", - "tt6320482", - "tt6139626", - "tt4060962", - "tt0089994", - "tt3758738", - "tt7717204", - "tt5451640", - "tt5512872", - "tt1467242", - "tt5827360", - "tt6598626", - "tt3919218", - "tt3546114", - "tt2880528", - "tt2966504", - "tt5192674", - "tt1998395", - "tt4116388", - "tt1505136", - "tt2846938", - "tt7125070", - "tt5178362", - "tt7454138", - "tt4963830", - "tt5822648", - "tt2833398", - "tt3262022", - "tt0079472", - "tt0071970", - "tt6619188", - "tt0326664", - "tt4173614", - "tt8063840", - "tt7702854", - "tt8671462", - "tt4501740", - "tt3799232", - "tt5919216", - "tt1322282", - "tt10534256", - "tt0994917", - "tt9617456", - "tt6423012", - "tt3472714", - "tt4286666", - "tt9361322", - "tt0839991", - "tt3568658", - "tt1034447", - "tt0457523", - "tt3118452", - "tt2852500", - "tt1500512", - "tt2290473", - "tt3281502", - "tt0471711", - "tt2091343", - "tt0869019", - "tt3602588", - "tt2783926", - "tt6259380", - "tt0095803", - "tt0058557", - "tt5086198", - "tt3848600", - "tt0473105", - "tt0102757", - "tt4876952", - "tt0238247", - "tt5220430", - "tt4057146", - "tt1031276", - "tt5052524", - "tt0126707", - "tt0211938", - "tt1830848", - "tt0245356", - "tt6552758", - "tt6944936", - "tt3392740", - "tt5460118", - "tt0114324", - "tt0466771", - "tt2432918", - "tt0112499", - "tt7150410", - "tt0101356", - "tt4184878", - "tt6159518", - "tt5491506", - "tt2917484", - "tt4085696", - "tt0086194", - "tt0096259", - "tt7068818", - "tt3722234", - "tt0094871", - "tt5081304", - "tt0305206", - "tt5226512", - "tt2106529", - "tt2337841", - "tt3283864", - "tt4424292", - "tt5599520", - "tt6174392", - "tt1493287", - "tt5544754", - "tt4287234", - "tt4864624", - "tt8106160", - "tt0080863", - "tt3040964", - "tt6173488", - "tt1978587", - "tt4156972", - "tt0311648", - "tt3647784", - "tt3833682", - "tt0093898", - "tt0239949", - "tt2070597", - "tt1249302", - "tt2562726", - "tt0097731", - "tt4610378", - "tt10101774", - "tt9260980", - "tt0117091", - "tt9379030", - "tt0765451", - "tt5239942", - "tt5319656", - "tt6982562", - "tt5009286", - "tt5667516", - "tt10039344", - "tt8750122", - "tt0097756", - "tt1462897", - "tt2395353", - "tt2380942", - "tt2450258", - "tt6261048", - "tt3603758", - "tt0047595", - "tt3958918", - "tt0104377", - "tt7636672", - "tt1212054", - "tt4626564", - "tt7275334", - "tt5759590", - "tt1458902", - "tt0067119", - "tt2223810", - "tt7825558", - "tt10755502", - "tt6046062", - "tt8757908", - "tt8985240", - "tt1023499", - "tt5587198", - "tt8008266", - "tt5886388", - "tt9887580", - "tt2217895", - "tt11272506", - "tt8840400", - "tt11198898", - "tt1746242", - "tt3812692", - "tt7980152", - "tt2527192", - "tt7293422", - "tt10255374", - "tt10687158", - "tt0080556", - "tt5190846", - "tt0065105", - "tt9207616", - "tt9314934", - "tt2805814", - "tt3173618", - "tt0186835", - "tt3917254", - "tt0044716", - "tt1776167", - "tt2289920", - "tt8366502", - "tt0057329", - "tt2035599", - "tt5492608", - "tt1522827", - "tt7606894", - "tt0061447", - "tt1831726", - "tt1673732", - "tt5375258", - "tt6146812", - "tt1891956", - "tt5881892", - "tt8535180", - "tt4956188", - "tt4152374", - "tt1691926", - "tt3758592", - "tt2463712", - "tt5968588", - "tt5812254", - "tt4041916", - "tt5118024", - "tt10305328", - "tt7309060", - "tt1655432", - "tt6351728", - "tt4289186", - "tt10044000", - "tt6507672", - "tt0249478", - "tt4126434", - "tt5540536", - "tt4220166", - "tt1701215", - "tt4484660", - "tt8377070", - "tt1379223", - "tt0107613", - "tt7745984", - "tt7823906", - "tt5128826", - "tt7321274", - "tt8498198", - "tt2345555", - "tt8975028", - "tt2400291", - "tt5723774", - "tt0243462", - "tt4952044", - "tt9526822", - "tt6096166", - "tt0339642", - "tt4185370", - "tt6087426", - "tt3053122", - "tt1764179", - "tt8144778", - "tt2217777", - "tt1995260", - "tt4815862", - "tt0084006", - "tt4738776", - "tt3501590", - "tt0104609", - "tt4900098", - "tt4794754", - "tt3629032", - "tt3362238", - "tt1871329", - "tt7935784", - "tt3391988", - "tt2998406", - "tt3543258", - "tt6032170", - "tt4506728", - "tt6613878", - "tt2338173", - "tt2375093", - "tt10273384", - "tt10407272", - "tt7310440", - "tt6217052", - "tt0230025", - "tt8973954", - "tt2578066", - "tt6695212", - "tt3509702", - "tt0051948", - "tt8593930", - "tt7390646", - "tt3683144", - "tt9341668", - "tt11534742", - "tt0447999", - "tt8760392", - "tt3455326", - "tt8406660", - "tt3534842", - "tt6853910", - "tt1514833", - "tt4532446", - "tt10290998", - "tt0815456", - "tt1327618", - "tt0796206", - "tt2195566", - "tt1894470", - "tt11058740", - "tt0081590", - "tt5328952", - "tt4116488", - "tt3249124", - "tt5485522", - "tt0024803", - "tt2190796", - "tt7902124", - "tt7116182", - "tt0021576", - "tt5332942", - "tt0076207", - "tt8404272", - "tt0022462", - "tt0017825", - "tt10379012", - "tt7776430", - "tt1223930", - "tt6340640", - "tt5057626", - "tt0436231", - "tt4686862", - "tt4236480", - "tt11248800", - "tt8514508", - "tt8075202", - "tt2187071", - "tt5058316", - "tt0106792", - "tt3675748", - "tt7375556", - "tt3090310", - "tt6821870", - "tt1158935", - "tt0084783", - "tt6087562", - "tt2808986", - "tt6444182", - "tt6090764", - "tt0020960", - "tt4012914", - "tt6070832", - "tt5966750", - "tt3006588", - "tt2486862", - "tt4254046", - "tt6588332", - "tt8485548", - "tt1650028", - "tt7299388", - "tt2231251", - "tt1481576", - "tt2008513", - "tt3165828", - "tt1954977", - "tt0212797", - "tt0059205", - "tt1118040", - "tt5108912", - "tt2241116", - "tt1445208", - "tt4022758", - "tt3830302", - "tt1359554", - "tt3300932", - "tt3549636", - "tt0104412", - "tt5968274", - "tt4884914", - "tt0089304", - "tt1664010", - "tt0106400", - "tt1525838", - "tt0118702", - "tt3154310", - "tt6295112", - "tt4392726", - "tt0409043", - "tt6322522", - "tt0415949", - "tt6360810", - "tt0120321", - "tt1104836", - "tt3503460", - "tt5537600", - "tt1577038", - "tt7984826", - "tt6346162", - "tt10772304", - "tt5111874", - "tt1010403", - "tt3666492", - "tt8567168", - "tt3444312", - "tt6284256", - "tt4456850", - "tt1385492", - "tt7638110", - "tt0113133", - "tt7291268", - "tt7535798", - "tt2278392", - "tt6020094", - "tt1783714", - "tt11091878", - "tt4780662", - "tt6923740", - "tt5291862", - "tt6350736", - "tt4590990", - "tt1249443", - "tt0073340", - "tt10578206", - "tt2736858", - "tt5367592", - "tt3226786", - "tt1339111", - "tt5923752", - "tt0381505", - "tt4087816", - "tt0109439", - "tt6408226", - "tt8605562", - "tt0097429", - "tt0020985", - "tt11107012", - "tt6068978", - "tt0841044", - "tt2721624", - "tt4441098", - "tt8236366", - "tt6521876", - "tt3665498", - "tt5030402", - "tt0283952", - "tt2466830", - "tt1620981", - "tt0365265", - "tt2245218", - "tt3394674", - "tt6185266", - "tt3685236", - "tt0435679", - "tt3291632", - "tt8139850", - "tt0318283", - "tt1536053", - "tt6079100", - "tt1480649", - "tt4558040", - "tt3734354", - "tt9278074", - "tt4206228", - "tt3723750", - "tt0257568", - "tt4357394", - "tt0375785", - "tt5304992", - "tt0086490", - "tt0109021", - "tt0800328", - "tt5664502", - "tt0377752", - "tt5194048", - "tt4347994", - "tt0377818", - "tt0091374", - "tt0338077", - "tt9315848", - "tt3021354", - "tt1946421", - "tt2484254", - "tt0406046", - "tt4651666", - "tt0070599", - "tt0085891", - "tt5618160", - "tt5730898", - "tt0110518", - "tt7243750", - "tt2866774", - "tt6285404", - "tt5031658", - "tt3000458", - "tt8331668", - "tt0396032", - "tt0430211", - "tt0289873", - "tt7133352", - "tt1582465", - "tt0386032", - "tt2011311", - "tt8361028", - "tt5167122", - "tt3142366", - "tt5759434", - "tt3367294", - "tt4076926", - "tt0302889", - "tt4540434", - "tt3302820", - "tt7959500", - "tt2292707", - "tt0455326", - "tt5198570", - "tt4006302", - "tt0163375", - "tt6333052", - "tt7933596", - "tt5706370", - "tt7241926", - "tt0340012", - "tt2205401", - "tt0353489", - "tt3780208", - "tt9354944", - "tt7236034", - "tt8769300", - "tt0430308", - "tt2493402", - "tt5040760", - "tt6880996", - "tt5131842", - "tt9612982", - "tt9440874", - "tt4601180", - "tt8353466", - "tt9217660", - "tt9673140", - "tt6920074", - "tt1568150", - "tt1560220", - "tt2908876", - "tt6110504", - "tt2388886", - "tt5645932", - "tt8094320", - "tt1090750", - "tt0116835", - "tt2545440", - "tt0080671", - "tt1323575", - "tt2118623", - "tt3175794", - "tt0177845", - "tt0116550", - "tt3402232", - "tt1777595", - "tt5636430", - "tt0060661", - "tt2251227", - "tt0075200", - "tt5000240", - "tt0100604", - "tt2165743", - "tt2023765", - "tt0117784", - "tt5428666", - "tt0462519", - "tt0056580", - "tt2546764", - "tt5419676", - "tt3087882", - "tt1065291", - "tt5126654", - "tt1833887", - "tt6032090", - "tt5634962", - "tt0120190", - "tt3469918", - "tt5912454", - "tt0340377", - "tt4772856", - "tt7671846", - "tt2427814", - "tt4179950", - "tt7126776", - "tt0422295", - "tt0109962", - "tt6700846", - "tt0279623", - "tt4516352", - "tt7816596", - "tt6001452", - "tt7214762", - "tt4795624", - "tt5390246", - "tt5016974", - "tt7689924", - "tt8083622", - "tt0265632", - "tt6821012", - "tt10091530", - "tt5228304", - "tt0103243", - "tt8041276", - "tt8805604", - "tt2569088", - "tt1213644", - "tt0099800", - "tt0099832", - "tt0096203", - "tt3317234", - "tt0222850", - "tt5278214", - "tt5658242", - "tt2679066", - "tt5322168", - "tt0110989", - "tt2081374", - "tt2755016", - "tt0247568", - "tt3223636", - "tt0494834", - "tt3842614", - "tt6429934", - "tt0419843", - "tt0205461", - "tt0292261", - "tt3392804", - "tt0231775", - "tt5952382", - "tt0113037", - "tt2349296", - "tt4488840", - "tt5161502", - "tt7322864", - "tt7712746", - "tt8803596", - "tt0076172", - "tt6923858", - "tt1976580", - "tt4858362", - "tt1224378", - "tt4946336", - "tt0150377", - "tt9335666", - "tt9391986", - "tt2243900", - "tt6039284", - "tt7262820", - "tt2268622", - "tt0120800", - "tt4412528", - "tt3108244", - "tt0369735", - "tt1320336", - "tt2534642", - "tt0240402", - "tt8074328", - "tt4235130", - "tt5195540", - "tt0337879", - "tt8362516", - "tt8954732", - "tt7348082", - "tt4465614", - "tt11477684", - "tt9033386", - "tt6188658", - "tt3578022", - "tt3593926", - "tt5792656", - "tt5471258", - "tt10922658", - "tt8432890", - "tt6905402", - "tt2496400", - "tt4678184", - "tt7284202", - "tt8026554", - "tt7946216", - "tt5943936", - "tt2404370", - "tt2210983", - "tt4558200", - "tt0068371", - "tt9097546", - "tt9063902", - "tt9308464", - "tt0044515", - "tt4701426", - "tt0067148", - "tt0063172", - "tt0103859", - "tt0070122", - "tt0056142", - "tt0822833", - "tt0102722", - "tt0103128", - "tt0088176", - "tt0091400", - "tt0835349", - "tt0278488", - "tt11378928", - "tt0093744", - "tt2064745", - "tt0144926", - "tt0103275", - "tt0086593", - "tt5775814", - "tt6066280", - "tt9308458", - "tt0402348", - "tt1859476", - "tt6359600", - "tt9308460", - "tt3377456", - "tt4578000", - "tt4030014", - "tt7133170", - "tt7412508", - "tt0073373", - "tt1773041", - "tt0117104", - "tt0117692", - "tt0408196", - "tt1693110", - "tt0081414", - "tt5740806", - "tt2461262", - "tt0433371", - "tt0118663", - "tt5117106", - "tt6485928", - "tt3141568", - "tt9377260", - "tt1536536", - "tt6718858", - "tt3861144", - "tt1001491", - "tt3517870", - "tt0071908", - "tt0315441", - "tt2204371", - "tt0446048", - "tt0101548", - "tt6068554", - "tt3541524", - "tt6071092", - "tt8974964", - "tt0071565", - "tt0091355", - "tt0078930", - "tt11468536", - "tt0032412", - "tt0116264", - "tt0089963", - "tt10397992", - "tt7311770", - "tt7710360", - "tt0104027", - "tt4177670", - "tt8618718", - "tt8408218", - "tt7456468", - "tt5078886", - "tt10821190", - "tt0213203", - "tt0110259", - "tt10922620", - "tt4012932", - "tt0101746", - "tt2238140", - "tt0337876", - "tt4679576", - "tt0282120", - "tt0113748", - "tt7600294", - "tt5130274", - "tt0457477", - "tt1046245", - "tt2290153", - "tt0090799", - "tt0087065", - "tt0347369", - "tt3569326", - "tt4653950", - "tt0138755", - "tt0083852", - "tt0085183", - "tt0087829", - "tt6737518", - "tt1880293", - "tt0349169", - "tt5854198", - "tt0060464", - "tt9534808", - "tt5748918", - "tt0075710", - "tt0808276", - "tt5017324", - "tt2270168", - "tt0039277", - "tt2746538", - "tt0088224", - "tt4250482", - "tt1392982", - "tt0108555", - "tt7624934", - "tt0123950", - "tt0061856", - "tt1188990", - "tt0100247", - "tt4034450", - "tt0107899", - "tt11439610", - "tt0094921", - "tt8890158", - "tt4333578", - "tt0120036", - "tt4399684", - "tt1869309", - "tt7120010", - "tt1464535", - "tt5704704", - "tt0086349", - "tt0084691", - "tt0098678", - "tt2400555", - "tt0093964", - "tt7542576", - "tt6963278", - "tt4457678", - "tt2388856", - "tt6240470", - "tt3581294", - "tt8560754", - "tt0103253", - "tt0120089", - "tt6460276", - "tt7391194", - "tt9590420", - "tt0109990", - "tt9342846", - "tt0134873", - "tt6068746", - "tt2098669", - "tt6998222", - "tt0082969", - "tt0094827", - "tt5813010", - "tt0271200", - "tt5809020", - "tt0286132", - "tt5779862", - "tt000031088", - "tt5108524", - "tt1047610", - "tt7532392", - "tt0100613", - "tt2433126", - "tt3517776", - "tt0286162", - "tt0479468", - "tt3517044", - "tt3149208", - "tt2326818", - "tt0472205", - "tt0181059", - "tt0756703", - "tt4620246", - "tt7156326", - "tt6028604", - "tt5219972", - "tt4061196", - "tt0248803", - "tt7609034", - "tt10662310", - "tt2782604", - "tt2950844", - "tt0897291", - "tt3205304", - "tt0036627", - "tt7549892", - "tt4426738", - "tt1396227", - "tt1648199", - "tt0118894", - "tt5565200", - "tt0087384", - "tt4629636", - "tt2395247", - "tt4612368", - "tt7260048", - "tt3904186", - "tt5615976", - "tt4529638", - "tt3087968", - "tt4010848", - "tt1411276", - "tt0119684", - "tt10433222", - "tt3859320", - "tt2805676", - "tt0250292", - "tt3777912", - "tt2172001", - "tt0093424", - "tt6091332", - "tt5127192", - "tt7385832", - "tt0049777", - "tt0210584", - "tt6752320", - "tt0054944", - "tt1149583", - "tt0107949", - "tt1691152", - "tt0167247", - "tt5926990", - "tt7114588", - "tt6206204", - "tt0960741", - "tt7689958", - "tt0093186", - "tt0081522", - "tt0080062", - "tt8924518", - "tt0081060", - "tt0082507", - "tt4619908", - "tt6045798", - "tt2787002", - "tt1343115", - "tt7319068", - "tt1713501", - "tt7578566", - "tt5379294", - "tt0070195", - "tt7539078", - "tt3534294", - "tt5951832", - "tt6098512", - "tt7453746", - "tt4368814", - "tt7231776", - "tt9510710", - "tt5213744", - "tt0100649", - "tt8113950", - "tt4923200", - "tt6177752", - "tt7007846", - "tt0284066", - "tt4230192", - "tt0279887", - "tt7335938", - "tt5709852", - "tt1600656", - "tt0051198", - "tt4450562", - "tt5665256", - "tt9647980", - "tt2122460", - "tt3405392", - "tt5286156", - "tt2289098", - "tt5770466", - "tt1691154", - "tt0918628", - "tt0415489", - "tt0102403", - "tt0219400", - "tt7984734", - "tt0393081", - "tt8043038", - "tt0255851", - "tt0362129", - "tt4289062", - "tt0067140", - "tt0092079", - "tt0083365", - "tt1645141", - "tt3867836", - "tt5312612", - "tt0097166", - "tt0115836", - "tt0396873", - "tt0096166", - "tt7390588", - "tt7942736", - "tt2592126", - "tt6469498", - "tt5782160", - "tt1034405", - "tt0084786", - "tt0102573", - "tt0095145", - "tt0103007", - "tt2399406", - "tt4700872", - "tt6264486", - "tt4417768", - "tt1024770", - "tt7655524", - "tt0112692", - "tt0433883", - "tt7134870", - "tt9083724", - "tt8106534", - "tt5588786", - "tt0468580", - "tt1681370", - "tt7851798", - "tt4544696", - "tt4633340", - "tt0111787", - "tt1302576", - "tt6753972", - "tt2070874", - "tt1150947", - "tt5452814", - "tt5354458", - "tt4159698", - "tt1942900", - "tt0085287", - "tt0254703", - "tt1884378", - "tt3918794", - "tt8844888", - "tt7626042", - "tt1597028", - "tt6793524", - "tt2428726", - "tt7746762", - "tt6796028", - "tt0118539", - "tt3382888", - "tt8294204", - "tt5781222", - "tt3552568", - "tt5515374", - "tt5872888", - "tt2877192", - "tt5777708", - "tt0267248", - "tt3004634", - "tt0080139", - "tt5974780", - "tt7290688", - "tt11451280", - "tt11451340", - "tt6012446", - "tt2657058", - "tt7529360", - "tt0095428", - "tt4791780", - "tt6865630", - "tt3091148", - "tt10472008", - "tt6264508", - "tt3127402", - "tt0224816", - "tt6409762", - "tt0181804", - "tt0095736", - "tt8749622", - "tt6458952", - "tt3463848", - "tt0430650", - "tt5928818", - "tt5152460", - "tt5866442", - "tt3026124", - "tt5824910", - "tt7521040", - "tt1597178", - "tt7798844", - "tt0270197", - "tt0328077", - "tt3951206", - "tt6368324", - "tt6490538", - "tt0318181", - "tt1844728", - "tt3823690", - "tt6084676", - "tt9177040", - "tt0242545", - "tt6794374", - "tt2825596", - "tt7759300", - "tt7200076", - "tt9272568", - "tt3096782", - "tt8144850", - "tt1411236", - "tt10622790", - "tt0028299", - "tt8856090", - "tt6316466", - "tt0057879", - "tt8287690", - "tt7877982", - "tt7260818", - "tt0063576", - "tt0049800", - "tt0312841", - "tt2117944", - "tt4323572", - "tt0273923", - "tt0097922", - "tt0074083", - "tt0223897", - "tt2302925", - "tt5709762", - "tt0064217", - "tt3647804", - "tt0098308", - "tt7689960", - "tt0489085", - "tt0235327", - "tt1725885", - "tt4770142", - "tt6756326", - "tt4195336", - "tt2294619", - "tt3507138", - "tt0110656", - "tt3567200", - "tt1401692", - "tt7813060", - "tt1062161", - "tt0117688", - "tt3954288", - "tt5881970", - "tt3597400", - "tt4790076", - "tt0395443", - "tt5176442", - "tt7954694", - "tt0082121", - "tt7897102", - "tt0271461", - "tt7685926", - "tt7233828", - "tt2530316", - "tt6943908", - "tt0073051", - "tt1275786", - "tt5987042", - "tt2928904", - "tt5420406", - "tt0094012", - "tt6582784", - "tt5706420", - "tt6423886", - "tt5883020", - "tt2071648", - "tt0114805", - "tt5607810", - "tt7246942", - "tt1833116", - "tt2352722", - "tt2142027", - "tt1560479", - "tt5703622", - "tt4214024", - "tt0035884", - "tt7666250", - "tt0216651", - "tt6871186", - "tt0055106", - "tt0096472", - "tt0085642", - "tt3245334", - "tt0099902", - "tt0075174", - "tt0122685", - "tt2727322", - "tt1042916", - "tt0055505", - "tt5214690", - "tt9081572", - "tt11100776", - "tt6105880", - "tt3855730", - "tt2921178", - "tt5457222", - "tt5227020", - "tt0790751", - "tt0101984", - "tt3955808", - "tt0339236", - "tt0159401", - "tt8301054", - "tt5431946", - "tt6536668", - "tt7321860", - "tt0356443", - "tt1375790", - "tt5895374", - "tt4675370", - "tt0051174", - "tt1277731", - "tt3324852", - "tt8537692", - "tt7369722", - "tt0110538", - "tt8041916", - "tt2004304", - "tt0097423", - "tt5360018", - "tt2327243", - "tt3776288", - "tt0117776", - "tt6648468", - "tt0298798", - "tt3891538", - "tt2317090", - "tt0120722", - "tt0345074", - "tt6572694", - "tt4698792", - "tt6857374", - "tt7231572", - "tt5752904", - "tt0099904", - "tt9165636", - "tt1737674", - "tt7973916", - "tt4851360", - "tt7365178", - "tt4067106", - "tt5997358", - "tt8551054", - "tt4866768", - "tt7328154", - "tt0234767", - "tt6009582", - "tt0295252", - "tt4881172", - "tt2797190", - "tt0477404", - "tt6342440", - "tt4510218", - "tt0303068", - "tt0344485", - "tt1965262", - "tt5807398", - "tt6038168", - "tt5606268", - "tt0296492", - "tt0274471", - "tt0119779", - "tt1293743", - "tt1922551", - "tt0468526", - "tt4196616", - "tt5741008", - "tt0060437", - "tt0079758", - "tt0146336", - "tt0046951", - "tt0326828", - "tt0252503", - "tt0059909", - "tt2186929", - "tt0088757", - "tt1213663", - "tt5776448", - "tt0086896", - "tt0094656", - "tt5056698", - "tt0765429", - "tt0115875", - "tt0067656", - "tt2123174", - "tt1675439", - "tt4277308", - "tt3272572", - "tt0274321", - "tt1239378", - "tt0876137", - "tt7520980", - "tt5798432", - "tt0162735", - "tt7768846", - "tt5985260", - "tt0099826", - "tt3526542", - "tt4817008", - "tt3358832", - "tt5331084", - "tt2430104", - "tt1104835", - "tt7335732", - "tt6111250", - "tt1524083", - "tt0024617", - "tt0765460", - "tt4538294", - "tt1998179", - "tt8977440", - "tt0960730", - "tt1735181", - "tt1083992", - "tt5212488", - "tt3027994", - "tt0067484", - "tt0097053", - "tt5639898", - "tt0074251", - "tt0271219", - "tt0077350", - "tt4192896", - "tt9178814", - "tt1727381", - "tt10486170", - "tt6560154", - "tt10260534", - "tt0469519", - "tt8888892", - "tt0090570", - "tt1566591", - "tt0120317", - "tt5078220", - "tt0358203", - "tt7625712", - "tt0465616", - "tt3505812", - "tt5673828", - "tt1977739", - "tt0114733", - "tt6086498", - "tt10060386", - "tt2831568", - "tt0183808", - "tt0463953", - "tt1315350", - "tt7429362", - "tt6032718", - "tt4443922", - "tt2620290", - "tt0250081", - "tt2923834", - "tt3458510", - "tt5005462", - "tt0122515", - "tt1646981", - "tt0109920", - "tt3804556", - "tt3330948", - "tt4191054", - "tt6672082", - "tt4943218", - "tt4470288", - "tt0082810", - "tt0878695", - "tt0102220", - "tt0106233", - "tt9154776", - "tt5972196", - "tt5936492", - "tt0401815", - "tt1067765", - "tt6509058", - "tt0107630", - "tt3113386", - "tt2213322", - "tt0796314", - "tt0156639", - "tt9153044", - "tt2965384", - "tt3148856", - "tt5739900", - "tt0118942", - "tt0070557", - "tt6236762", - "tt5033114", - "tt5909334", - "tt0073460", - "tt5257726", - "tt8554826", - "tt0243664", - "tt3044748", - "tt8941056", - "tt1421373", - "tt0326806", - "tt7291132", - "tt0087507", - "tt0090683", - "tt3653132", - "tt0458480", - "tt1156396", - "tt1182887", - "tt7558548", - "tt2508258", - "tt2042449", - "tt2489736", - "tt5990458", - "tt0902952", - "tt9309046", - "tt8742774", - "tt5580602", - "tt4466894", - "tt4106148", - "tt0183288", - "tt4499228", - "tt7094374", - "tt7509538", - "tt0110146", - "tt0104690", - "tt10551160", - "tt0087681", - "tt8517004", - "tt0251021", - "tt2146834", - "tt1729226", - "tt0476396", - "tt0095316", - "tt1320242", - "tt1087798", - "tt1810636", - "tt0128473", - "tt8018008", - "tt3165264", - "tt5322136", - "tt2994382", - "tt5932502", - "tt6594148", - "tt2395219", - "tt8667202", - "tt0119679", - "tt4836580", - "tt6355580", - "tt0104346", - "tt8322908", - "tt4760268", - "tt5301544", - "tt0111470", - "tt3256812", - "tt6264244", - "tt7630164", - "tt4948040", - "tt2246887", - "tt0210094", - "tt4807272", - "tt10249374", - "tt1737794", - "tt1294789", - "tt4218998", - "tt0219126", - "tt0026778", - "tt2084953", - "tt8659750", - "tt2387416", - "tt8829872", - "tt4789822", - "tt5547654", - "tt0307639", - "tt3406296", - "tt3295276", - "tt0059549", - "tt5769006", - "tt11133600", - "tt2433448", - "tt1977892", - "tt1225856", - "tt6303962", - "tt4878482", - "tt0469937", - "tt6491296", - "tt2796792", - "tt5612874", - "tt11247028", - "tt5184272", - "tt7521324", - "tt0236034", - "tt9079304", - "tt0359423", - "tt1564005", - "tt3233704", - "tt4534886", - "tt8749132", - "tt3009530", - "tt2178927", - "tt0069280", - "tt1146321", - "tt0108186", - "tt0096483", - "tt1405412", - "tt2246565", - "tt5844340", - "tt0083598", - "tt1226276", - "tt0093164", - "tt1249169", - "tt2189778", - "tt0090946", - "tt9143304", - "tt5643730", - "tt6359082", - "tt8451938", - "tt0840787", - "tt1599315", - "tt7482508", - "tt0091756", - "tt7900528", - "tt0322422", - "tt7202354", - "tt5840030", - "tt6690910", - "tt0451176", - "tt4698740", - "tt1213825", - "tt5270688", - "tt10466182", - "tt6176928", - "tt1745932", - "tt0857207", - "tt3856504", - "tt6544524", - "tt5922124", - "tt4939156", - "tt7689950", - "tt7657428", - "tt2512528", - "tt4067256", - "tt4765862", - "tt7214842", - "tt0103670", - "tt0086355", - "tt5586362", - "tt1670269", - "tt0111732", - "tt0087268", - "tt1237838", - "tt2125647", - "tt2102508", - "tt5781146", - "tt6543420", - "tt0105001", - "tt0086955", - "tt0109447", - "tt5891260", - "tt0906005", - "tt9290234", - "tt7394816", - "tt3859872", - "tt9404440", - "tt0844768", - "tt6032704", - "tt8638750", - "tt0814130", - "tt3784042", - "tt11385066", - "tt5885106", - "tt0844029", - "tt0082263", - "tt1176095", - "tt4414438", - "tt6566830", - "tt2402114", - "tt5318534", - "tt7232438", - "tt1474456", - "tt2181898", - "tt2180351", - "tt10003978", - "tt5645196", - "tt4526546", - "tt2729236", - "tt6450628", - "tt4130484", - "tt6864090", - "tt2948566", - "tt8187918", - "tt5176878", - "tt4528692", - "tt0161100", - "tt3431016", - "tt4016226", - "tt0384686", - "tt3441700", - "tt5556152", - "tt7052244", - "tt3958964", - "tt2117946", - "tt2788512", - "tt2620792", - "tt5232294", - "tt0804558", - "tt2254010", - "tt0111361", - "tt7149336", - "tt2479384", - "tt7303948", - "tt5814958", - "tt0443450", - "tt0063341", - "tt3833400", - "tt0068200", - "tt6560164", - "tt0378230", - "tt8415352", - "tt10108544", - "tt4079776", - "tt5864904", - "tt8365426", - "tt1974366", - "tt1024724", - "tt0262396", - "tt3317696", - "tt1774591", - "tt3639656", - "tt1698654", - "tt0837803", - "tt2094155", - "tt0235553", - "tt4667854", - "tt4708052", - "tt0822818", - "tt8027322", - "tt1568923", - "tt3007302", - "tt4400028", - "tt6633182", - "tt10977680", - "tt5331878", - "tt6869644", - "tt4512714", - "tt3244466", - "tt6295122", - "tt4622202", - "tt4840666", - "tt7188978", - "tt0119644", - "tt0105670", - "tt0038703", - "tt0038650", - "tt0082601", - "tt0033627", - "tt0088249", - "tt6827388", - "tt0101606", - "tt3798866", - "tt0055008", - "tt3412738", - "tt0069840", - "tt6853580", - "tt3762912", - "tt0157075", - "tt3922474", - "tt0083061", - "tt2407730", - "tt2559214", - "tt0089945", - "tt5557976", - "tt1787660", - "tt1233571", - "tt0116493", - "tt4729790", - "tt4081012", - "tt7307136", - "tt3255590", - "tt1209377", - "tt5065142", - "tt1733733", - "tt1639086", - "tt5563862", - "tt3625516", - "tt6175486", - "tt3882054", - "tt1939686", - "tt4194108", - "tt0267989", - "tt3194678", - "tt5114154", - "tt0182000", - "tt6736782", - "tt0373908", - "tt0113596", - "tt6974888", - "tt1931486", - "tt3462880", - "tt4169390", - "tt3780754", - "tt0461660", - "tt6196936", - "tt11318624", - "tt3387444", - "tt1422189", - "tt7208564", - "tt8970448", - "tt7612748", - "tt5022626", - "tt3797808", - "tt0377800", - "tt8276562", - "tt4209174", - "tt2039412", - "tt7296862", - "tt6086080", - "tt5431890", - "tt2638900", - "tt4117538", - "tt0349416", - "tt0446676", - "tt7562932", - "tt7115980", - "tt1615110", - "tt3774866", - "tt4333210", - "tt4338076", - "tt5657712", - "tt2690226", - "tt6612098", - "tt5579442", - "tt3468316", - "tt4587588", - "tt5011848", - "tt0113158", - "tt4369136", - "tt0119509", - "tt6465940", - "tt2388986", - "tt5441464", - "tt3093286", - "tt0780059", - "tt3754662", - "tt8467788", - "tt0345543", - "tt5817456", - "tt4454078", - "tt5453522", - "tt3127016", - "tt0084654", - "tt5424228", - "tt0054709", - "tt0074888", - "tt0029557", - "tt0093393", - "tt0029453", - "tt0058578", - "tt0021818", - "tt0052016", - "tt0018379", - "tt0066356", - "tt0049189", - "tt0042579", - "tt0335121", - "tt0473434", - "tt2147134", - "tt0283832", - "tt0021654", - "tt0074121", - "tt0075610", - "tt0164312", - "tt0101254", - "tt10011252", - "tt7365040", - "tt6328242", - "tt0179183", - "tt1517805", - "tt0088650", - "tt0043687", - "tt3989744", - "tt0291350", - "tt8629434", - "tt0082639", - "tt5893332", - "tt3458118", - "tt9026184", - "tt9495224", - "tt8142044", - "tt0072201", - "tt4765240", - "tt7256866", - "tt6386352", - "tt1542768", - "tt6289320", - "tt7235038", - "tt7605074", - "tt8479346", - "tt4789192", - "tt2234451", - "tt5232468", - "tt3564858", - "tt2845780", - "tt2838568", - "tt2479478", - "tt2962984", - "tt4606498", - "tt3418064", - "tt3562852", - "tt5278460", - "tt3171832", - "tt4303202", - "tt7608028", - "tt5566790", - "tt1159984", - "tt7608534", - "tt4758646", - "tt3212830", - "tt7257508", - "tt10432050", - "tt3151710", - "tt6412452", - "tt5717492", - "tt2287655", - "tt4537842", - "tt0837156", - "tt0250371", - "tt8709036", - "tt5539052", - "tt3155328", - "tt4827878", - "tt3163238", - "tt5040202", - "tt5732566", - "tt5928396", - "tt5664222", - "tt3475540", - "tt9204352", - "tt4357764", - "tt0853153", - "tt6774914", - "tt10449248", - "tt3839992", - "tt10427010", - "tt7278178", - "tt5750534", - "tt8792630", - "tt7937440", - "tt4058426", - "tt9586294", - "tt7477310", - "tt4632440", - "tt0083271", - "tt0171786", - "tt10295602", - "tt0088083", - "tt0090246", - "tt0171800", - "tt0171789", - "tt5991974", - "tt3398066", - "tt7122516", - "tt1561770", - "tt9165122", - "tt0123927", - "tt3793788", - "tt3530690", - "tt6119856", - "tt0085547", - "tt1135092", - "tt0851530", - "tt4737910", - "tt4329810", - "tt3268340", - "tt0114380", - "tt2214596", - "tt2931072", - "tt0429173", - "tt0486665", - "tt6953974", - "tt4680568", - "tt2201034", - "tt2927178", - "tt0377043", - "tt1638308", - "tt0087089", - "tt4206218", - "tt0758751", - "tt3184212", - "tt7253190", - "tt0428038", - "tt0871867", - "tt0102217", - "tt4871018", - "tt0107688", - "tt0089444", - "tt0119640", - "tt7375304", - "tt7021508", - "tt0902328", - "tt3962828", - "tt8210516", - "tt3342332", - "tt4792648", - "tt5240258", - "tt5710042", - "tt4085044", - "tt5052966", - "tt3591988", - "tt4149732", - "tt4378628", - "tt0980970", - "tt3852028", - "tt3090670", - "tt7286456", - "tt0363771", - "tt2278911", - "tt4224754", - "tt0499448", - "tt0457701", - "tt0114210", - "tt0372784", - "tt2049630", - "tt0120812", - "tt5653514", - "tt8593878", - "tt0052226", - "tt0403537", - "tt2415112", - "tt6169934", - "tt0293564", - "tt0468569", - "tt6127004", - "tt1345836", - "tt0311750", - "tt0103776", - "tt0045989", - "tt0266915", - "tt3036654", - "tt0112462", - "tt7897122", - "tt0113014", - "tt5017220", - "tt0432267", - "tt0361411", - "tt0118688", - "tt4666732", - "tt0096895", - "tt2975590", - "tt0060153", - "tt0463931", - "tt4185152", - "tt3593666", - "tt1046894", - "tt0345461", - "tt0241527", - "tt1393000", - "tt4016588", - "tt0304141", - "tt5612742", - "tt0417741", - "tt0926084", - "tt3517984", - "tt0373889", - "tt8196692", - "tt1201607", - "tt0295297", - "tt0330373", - "tt6140580", - "tt0103827", - "tt0446724", - "tt1523987", - "tt8552226", - "tt3826338", - "tt4765188", - "tt5990444", - "tt3060390", - "tt3441840", - "tt0822849", - "tt0325055", - "tt6212496", - "tt3877092", - "tt0179473", - "tt7457716", - "tt2712758", - "tt2190467", - "tt7690016", - "tt1145144", - "tt0280674", - "tt4269118", - "tt5588416", - "tt3290440", - "tt0112255", - "tt3731580", - "tt5280684", - "tt2533492", - "tt1517249", - "tt0387059", - "tt4658578", - "tt1872082", - "tt1718998", - "tt0262911", - "tt0457090", - "tt4520924", - "tt3563342", - "tt3026144", - "tt4154004", - "tt4417186", - "tt0449581", - "tt7737656", - "tt3756722", - "tt3745906", - "tt4076344", - "tt0491005", - "tt3683072", - "tt2018111", - "tt3834272", - "tt3696358", - "tt8358682", - "tt3074578", - "tt0061080", - "tt0117786", - "tt3824458", - "tt2709692", - "tt10642244", - "tt0338348", - "tt0128853", - "tt10481792", - "tt0762121", - "tt0086005", - "tt1401143", - "tt0058536", - "tt0098115", - "tt0032981", - "tt1711525", - "tt0240890", - "tt0218967", - "tt0110367", - "tt0155753", - "tt0252028", - "tt0099487", - "tt2402927", - "tt0433400", - "tt0037059", - "tt0059026", - "tt1430607", - "tt0116705", - "tt0085334", - "tt0039628", - "tt0034862", - "tt0102493", - "tt5816652", - "tt2120750", - "tt0060345", - "tt8404614", - "tt0337824", - "tt7014694", - "tt0170016", - "tt3521746", - "tt5237552", - "tt5210380", - "tt8367184", - "tt3690174", - "tt4273188", - "tt4882548", - "tt1772373", - "tt5861882", - "tt5806506", - "tt0369053", - "tt7084614", - "tt5162458", - "tt0089410", - "tt5818010", - "tt3901944", - "tt2649680", - "tt10515852", - "tt6674318", - "tt0120257", - "tt11394172", - "tt5815160", - "tt2330654", - "tt7315570", - "tt0114924", - "tt0086465", - "tt5576318", - "tt0110955", - "tt7758866", - "tt0117372", - "tt0047673", - "tt6225520", - "tt3530002", - "tt0373469", - "tt0143338", - "tt2083355", - "tt0039190", - "tt0085936", - "tt2990140", - "tt4443658", - "tt0056211", - "tt0096061", - "tt0032049", - "tt0037795", - "tt0033728", - "tt4616802", - "tt0033397", - "tt0063500", - "tt0033879", - "tt5740852", - "tt3333920", - "tt0113537", - "tt0104714", - "tt0070424", - "tt2308733", - "tt0878647", - "tt0112864", - "tt0122151", - "tt3385398", - "tt0172726", - "tt4560926", - "tt8480782", - "tt6209282", - "tt0099423", - "tt1621427", - "tt1293842", - "tt0337978", - "tt0097733", - "tt0095016", - "tt0093409", - "tt5667052", - "tt8237340", - "tt0087363", - "tt2174896", - "tt10720568", - "tt0329200", - "tt1606378", - "tt2205652", - "tt5559544", - "tt0099700", - "tt0104431", - "tt0113421", - "tt6888938", - "tt0044008", - "tt0314331", - "tt0099785", - "tt3850590", - "tt2117905", - "tt4514660", - "tt0037595", - "tt4902716", - "tt1798603", - "tt0307987", - "tt0120670", - "tt4730006", - "tt0319343", - "tt0064349", - "tt5001426", - "tt5848862", - "tt0071222", - "tt0097958", - "tt1268799", - "tt5846744", - "tt5654600", - "tt0840304", - "tt11324024", - "tt0112606", - "tt5460068", - "tt3175798", - "tt2226309", - "tt5668054", - "tt5050200", - "tt6275674", - "tt5126178", - "tt7281472", - "tt5125620", - "tt7130192", - "tt5347148", - "tt5782040", - "tt1974382", - "tt4344742", - "tt4473806", - "tt10871460", - "tt0102917", - "tt3856972", - "tt1479676", - "tt0073626", - "tt0167107", - "tt7025976", - "tt0059274", - "tt0165854", - "tt10060094", - "tt3433160", - "tt0910847", - "tt6185026", - "tt3464378", - "tt2923780", - "tt6086614", - "tt3831636", - "tt4170186", - "tt2667960", - "tt2855724", - "tt0363504", - "tt1535491", - "tt0419922", - "tt0108311", - "tt0459250", - "tt5537330", - "tt6877088", - "tt7763400", - "tt8998634", - "tt2669212", - "tt6508326", - "tt7588688", - "tt0900916", - "tt9103332", - "tt3159818", - "tt5955112", - "tt6205690", - "tt0093143", - "tt3353060", - "tt0099030", - "tt5610134", - "tt7203520", - "tt4607722", - "tt4835940", - "tt8149090", - "tt3596436", - "tt7281538", - "tt3683386", - "tt8613908", - "tt5242920", - "tt0030442", - "tt7085724", - "tt9674000", - "tt7819506", - "tt1194661", - "tt0094744", - "tt4157728", - "tt0300195", - "tt8327628", - "tt3984432", - "tt3848072", - "tt1626240", - "tt2181853", - "tt2328727", - "tt8850510", - "tt8535852", - "tt10130010", - "tt7642718", - "tt0377057", - "tt8672786", - "tt0120376", - "tt6306564", - "tt0086879", - "tt7709254", - "tt8879926", - "tt1067769", - "tt3646836", - "tt0243925", - "tt0436855", - "tt2289406", - "tt0099472", - "tt0360940", - "tt9271194", - "tt7149254", - "tt11044122", - "tt4360924", - "tt5303442", - "tt9359428", - "tt5360150", - "tt2673388", - "tt7282278", - "tt1043748", - "tt0280870", - "tt5113384", - "tt0206113", - "tt6098486", - "tt1205608", - "tt4592572", - "tt0330768", - "tt2516304", - "tt8178396", - "tt0160236", - "tt6504868", - "tt0896522", - "tt4382376", - "tt9638582", - "tt7022034", - "tt7302488", - "tt6283780", - "tt6557356", - "tt5176536", - "tt3520216", - "tt6567012", - "tt2227004", - "tt4520518", - "tt4587000", - "tt0913413", - "tt3522530", - "tt5692786", - "tt5674368", - "tt0382048", - "tt8050598", - "tt0823195", - "tt3895838", - "tt0172586", - "tt0096376", - "tt7088028", - "tt0106967", - "tt2315806", - "tt4841688", - "tt6236198", - "tt0053454", - "tt9265856", - "tt10986394", - "tt8493776", - "tt4682804", - "tt9149946", - "tt0099934", - "tt6236662", - "tt0041983", - "tt5244588", - "tt4660172", - "tt1626811", - "tt10308474", - "tt0068983", - "tt3548962", - "tt2071526", - "tt0117040", - "tt1003116", - "tt7473716", - "tt0056639", - "tt7549996", - "tt0098019", - "tt1957886", - "tt0102068", - "tt0086428", - "tt0498536", - "tt0799987", - "tt0118788", - "tt0070788", - "tt5442626", - "tt3611124", - "tt3724490", - "tt0065069", - "tt10260810", - "tt3954646", - "tt0383534", - "tt11402600", - "tt3611122", - "tt6339042", - "tt4041476", - "tt5944496", - "tt11197082", - "tt4267108", - "tt4246856", - "tt3583430", - "tt3735810", - "tt0216746", - "tt1133559", - "tt10267396", - "tt4096990", - "tt4723246", - "tt0050841", - "tt4526372", - "tt1421048", - "tt0114786", - "tt4877606", - "tt1176725", - "tt3498956", - "tt10621180", - "tt0105789", - "tt5351000", - "tt1235170", - "tt2475914", - "tt3894958", - "tt1298530", - "tt1621432", - "tt3827540", - "tt4943236", - "tt2458010", - "tt5467554", - "tt4286760", - "tt5069136", - "tt11269704", - "tt7557536", - "tt4137596", - "tt2108593", - "tt0028313", - "tt4065414", - "tt4109632", - "tt0058544", - "tt9815714", - "tt3522138", - "tt3118958", - "tt0058379", - "tt0080983", - "tt7370570", - "tt3509978", - "tt11416686", - "tt0059346", - "tt1467265", - "tt8456396", - "tt2712990", - "tt4567320", - "tt7042800", - "tt0201716", - "tt5775370", - "tt8125466", - "tt7104578", - "tt6098544", - "tt7064954", - "tt3482062", - "tt9412268", - "tt6685776", - "tt6950250", - "tt4757648", - "tt0042949", - "tt7657462", - "tt6868216", - "tt3122608", - "tt7722000", - "tt1396219", - "tt3525346", - "tt7390126", - "tt2644902", - "tt6265620", - "tt0880648", - "tt6973360", - "tt8929142", - "tt3963304", - "tt4289340", - "tt2756910", - "tt4325400", - "tt3067222", - "tt8974850", - "tt5701718", - "tt5969358", - "tt7603290", - "tt3120054", - "tt0164444", - "tt4945490", - "tt0062936", - "tt8732914", - "tt0787470", - "tt8332808", - "tt7468604", - "tt10963986", - "tt1047832", - "tt4712618", - "tt10642154", - "tt8354006", - "tt8498184", - "tt0091002", - "tt0381707", - "tt10345008", - "tt10964168", - "tt0164522", - "tt10471748", - "tt0059418", - "tt5428090", - "tt9087578", - "tt10136898", - "tt0118159", - "tt3908598", - "tt0046031", - "tt2750288", - "tt3177264", - "tt0201196", - "tt6997574", - "tt10921256", - "tt0182295", - "tt5606616", - "tt4935480", - "tt10768278", - "tt3611052", - "tt4045146", - "tt10295168", - "tt0896040", - "tt10482348", - "tt4045732", - "tt0448114", - "tt1776238", - "tt0926110", - "tt2390032", - "tt5023566", - "tt3412784", - "tt1942920", - "tt10887870", - "tt3147284", - "tt10210182", - "tt3908634", - "tt6333054", - "tt1277733", - "tt3253232", - "tt0111359", - "tt5974066", - "tt2123342", - "tt3827868", - "tt3518702", - "tt3953186", - "tt3719320", - "tt6893836", - "tt2314374", - "tt7263664", - "tt5249098", - "tt3555514", - "tt3704416", - "tt6341668", - "tt0314166", - "tt3839880", - "tt3272050", - "tt6196754", - "tt5477566", - "tt9562694", - "tt2854394", - "tt8050266", - "tt3951298", - "tt0218616", - "tt5481010", - "tt6187620", - "tt5255882", - "tt4991112", - "tt10583460", - "tt7135152", - "tt3854262", - "tt10341248", - "tt2378100", - "tt9201720", - "tt3064532", - "tt5365066", - "tt4469518", - "tt4490824", - "tt4280818", - "tt7136736", - "tt2070773", - "tt6231784", - "tt0082362", - "tt0210544", - "tt3168760", - "tt0473389", - "tt6374204", - "tt0087810", - "tt3723788", - "tt6388206", - "tt7441032", - "tt3717016", - "tt1380279", - "tt0035173", - "tt4798956", - "tt5591822", - "tt0044762", - "tt5355726", - "tt1584733", - "tt5176390", - "tt0038694", - "tt0298354", - "tt1827578", - "tt1244666", - "tt3661104", - "tt7323598", - "tt3122390", - "tt7588584", - "tt0161220", - "tt5131914", - "tt7917484", - "tt4082644", - "tt6878820", - "tt0090057", - "tt4180286", - "tt3486210", - "tt0870089", - "tt2636488", - "tt6221540", - "tt6415248", - "tt3529656", - "tt0045469", - "tt0047794", - "tt0042179", - "tt5737408", - "tt5343532", - "tt0039998", - "tt0076354", - "tt0072725", - "tt0343449", - "tt2257284", - "tt5349016", - "tt0109402", - "tt0110157", - "tt0037939", - "tt0113609", - "tt4276834", - "tt8796786", - "tt3915160", - "tt5981802", - "tt1069226", - "tt5884280", - "tt7116248", - "tt3068466", - "tt0092963", - "tt0039037", - "tt7551962", - "tt4278806", - "tt6378710", - "tt6185074", - "tt8295976", - "tt6026014", - "tt4628812", - "tt2334090", - "tt8195518", - "tt10655906", - "tt9275046", - "tt0054013", - "tt8784388", - "tt6478538", - "tt8997134", - "tt3991066", - "tt9815596", - "tt8722440", - "tt11225428", - "tt7913934", - "tt2329032", - "tt0441645", - "tt5533308", - "tt8883498", - "tt0047685", - "tt0120169", - "tt3804730", - "tt3850496", - "tt9765144", - "tt0061655", - "tt0282593", - "tt0840303", - "tt3951252", - "tt4103470", - "tt5093668", - "tt3068192", - "tt0309372", - "tt5691854", - "tt6217664", - "tt2394063", - "tt3130594", - "tt7997256", - "tt1852947", - "tt1335977", - "tt7974234", - "tt1695994", - "tt6981634", - "tt6286216", - "tt3063470", - "tt0428541", - "tt4146410", - "tt10550884", - "tt1350484", - "tt1371160", - "tt0018756", - "tt0116041", - "tt3457508", - "tt3769038", - "tt3702704", - "tt0018876", - "tt8848462", - "tt0068311", - "tt0022395", - "tt0018328", - "tt0020142", - "tt8451018", - "tt0217126", - "tt9135318", - "tt9288486", - "tt0035252", - "tt7831530", - "tt10887880", - "tt8717018", - "tt6897772", - "tt0275277", - "tt11313076", - "tt10873852", - "tt6098794", - "tt8846262", - "tt6179604", - "tt4135326", - "tt9184150", - "tt0087903", - "tt1677082", - "tt6333080", - "tt0457290", - "tt6008686", - "tt3015110", - "tt2654360", - "tt3332282", - "tt6250792", - "tt5796838", - "tt1217590", - "tt4670016", - "tt0775488", - "tt1861439", - "tt6342110", - "tt7316576", - "tt5858580", - "tt0238137", - "tt7158814", - "tt3105662", - "tt9055114", - "tt5170360", - "tt4312842", - "tt0329374", - "tt3818286", - "tt1473345", - "tt1330015", - "tt5243424", - "tt7598968", - "tt8677112", - "tt1927093", - "tt0934981", - "tt0385013", - "tt03395648", - "tt1967688", - "tt5802404", - "tt4956376", - "tt0267657", - "tt8485364", - "tt9537428", - "tt8186318", - "tt0127069", - "tt1407927", - "tt2017733", - "tt3314584", - "tt6396104", - "tt0271285", - "tt3464290", - "tt11334312", - "tt1815899", - "tt0211320", - "tt10332890", - "tt8618412", - "tt9153006", - "tt6692926", - "tt5020188", - "tt2363109", - "tt1588291", - "tt0495682", - "tt1570964", - "tt6170432", - "tt5478446", - "tt3593978", - "tt0100944", - "tt1105740", - "tt7420342", - "tt0105401", - "tt0037771", - "tt4295602", - "tt4052400", - "tt0036953", - "tt4160176", - "tt1954843", - "tt1791681", - "tt1625340", - "tt0464061", - "tt4045384", - "tt6881910", - "tt1787778", - "tt0402230", - "tt5665452", - "tt7093470", - "tt3097956", - "tt2282662", - "tt4580550", - "tt2314886", - "tt4779884", - "tt3977462", - "tt4785640", - "tt6587078", - "tt1821426", - "tt6803170", - "tt6664700", - "tt3852436", - "tt2602338", - "tt3604156", - "tt0178050", - "tt4654016", - "tt1595842", - "tt0284490", - "tt0196106", - "tt2924352", - "tt0222167", - "tt2393805", - "tt1844763", - "tt3891436", - "tt7628146", - "tt0269483", - "tt4941354", - "tt4848010", - "tt6747818", - "tt5922484", - "tt0441881", - "tt3899070", - "tt6984460", - "tt2337280", - "tt6744422", - "tt0120669", - "tt0785032", - "tt6153538", - "tt6385910", - "tt0084370", - "tt0089756", - "tt9617716", - "tt0093509", - "tt0068595", - "tt0085371", - "tt10149506", - "tt8932254", - "tt3100678", - "tt11193888", - "tt4978100", - "tt7423486", - "tt9252508", - "tt2935510", - "tt0032338", - "tt10006006", - "tt4025798", - "tt7689966", - "tt0365229", - "tt1311076", - "tt0963207", - "tt0318761", - "tt0481513", - "tt1835977", - "tt3302160", - "tt1390398", - "tt5278462", - "tt9296692", - "tt8897988", - "tt6958014", - "tt4851758", - "tt4839476", - "tt0322389", - "tt0463935", - "tt4380748", - "tt0365545", - "tt6214468", - "tt0048127", - "tt0197521", - "tt0102932", - "tt6155456", - "tt0041368", - "tt2157045", - "tt0100625", - "tt0106598", - "tt0068276", - "tt9110902", - "tt11142536", - "tt0147800", - "tt0488147", - "tt9657904", - "tt0101458", - "tt1129396", - "tt0160596", - "tt11163008", - "tt0069049", - "tt5540058", - "tt4539828", - "tt3259276", - "tt8106576", - "tt3310896", - "tt10374234", - "tt7875948", - "tt3953626", - "tt6499694", - "tt4334636", - "tt6400674", - "tt5292624", - "tt1644669", - "tt0498348", - "tt0112656", - "tt7188014", - "tt1484521", - "tt0271436", - "tt3687304", - "tt6090268", - "tt8232232", - "tt0232632", - "tt6688022", - "tt6398184", - "tt5108168", - "tt4667084", - "tt0035140", - "tt7139936", - "tt0206588", - "tt6328004", - "tt1141702", - "tt4096638", - "tt9212666", - "tt5480528", - "tt7488036", - "tt8239736", - "tt2359307", - "tt9058944", - "tt2180168", - "tt6649066", - "tt11047498", - "tt8548792", - "tt2728784", - "tt4591226", - "tt6229100", - "tt10022384", - "tt3627488", - "tt3137764", - "tt10551144", - "tt8106584", - "tt9101692", - "tt0192942", - "tt0137141", - "tt0064356", - "tt5667296", - "tt7736656", - "tt0220627", - "tt5749596", - "tt0106580", - "tt6241428", - "tt4643034", - "tt3375972", - "tt3210376", - "tt8609926", - "tt5950094", - "tt11265724", - "tt9165642", - "tt6437346", - "tt6931414", - "tt4488744", - "tt7806518", - "tt10253466", - "tt0038577", - "tt0093217", - "tt8583694", - "tt0071804", - "tt7869070", - "tt7248248", - "tt0036047", - "tt0100172", - "tt1532961", - "tt0091688", - "tt0036004", - "tt6833650", - "tt0377309", - "tt0033781", - "tt2088846", - "tt2270274", - "tt0209958", - "tt1907707", - "tt5087554", - "tt1110626", - "tt6641528", - "tt1213585", - "tt5483172", - "tt0910554", - "tt4323568", - "tt0258273", - "tt2041487", - "tt0453465", - "tt9351746", - "tt4762824", - "tt4974208", - "tt0475998", - "tt3844320", - "tt0306841", - "tt8466648", - "tt0439478", - "tt1864405", - "tt2658538", - "tt0361309", - "tt11286066", - "tt0785077", - "tt0048729", - "tt0090333", - "tt10090796", - "tt3487278", - "tt6833964", - "tt9378360", - "tt6494344", - "tt5969696", - "tt4742556", - "tt1754264", - "tt6379314", - "tt8995254", - "tt0051655", - "tt10650924", - "tt0106343", - "tt11313068", - "tt0365748", - "tt0327162", - "tt1986202", - "tt0106342", - "tt2763790", - "tt2939114", - "tt0439876", - "tt0243554", - "tt1507002", - "tt3710966", - "tt0425112", - "tt0409459", - "tt4900018", - "tt0088885", - "tt3771626", - "tt8079248", - "tt2043801", - "tt0089601", - "tt2386868", - "tt0240468", - "tt5612850", - "tt0086969", - "tt0221799", - "tt2043887", - "tt6268734", - "tt2173248", - "tt0326900", - "tt0268695", - "tt2289182", - "tt0317303", - "tt2936390", - "tt0044391", - "tt0090110", - "tt6096194", - "tt4443838", - "tt1220227", - "tt0338325", - "tt1493127", - "tt6089358", - "tt5513260", - "tt6794376", - "tt0093690", - "tt1850418", - "tt0115927", - "tt0857376", - "tt1459459", - "tt0383060", - "tt3544048", - "tt5462288", - "tt6791238", - "tt0221218", - "tt3237064", - "tt5221184", - "tt0331933", - "tt7656770", - "tt5231992", - "tt1219671", - "tt5676118", - "tt4638148", - "tt4552534", - "tt5435476", - "tt0205177", - "tt1885325", - "tt1139111", - "tt9870402", - "tt1499249", - "tt3962848", - "tt0480271", - "tt2282719", - "tt0418004", - "tt7533152", - "tt5075662", - "tt3115712", - "tt0302640", - "tt3384180", - "tt1460798", - "tt3268850", - "tt6422938", - "tt0479125", - "tt7240568", - "tt0497964", - "tt3479316", - "tt10349372", - "tt7349950", - "tt5699060", - "tt0216165", - "tt6144876", - "tt0295578", - "tt5441282", - "tt5982922", - "tt8924844", - "tt4225622", - "tt6079516", - "tt8634348", - "tt11161374", - "tt3293594", - "tt10514016", - "tt6544220", - "tt9135260", - "tt0427543", - "tt9204204", - "tt8234892", - "tt10141990", - "tt1871391", - "tt4054382", - "tt5431284", - "tt3401026", - "tt2369275", - "tt8983294", - "tt0071838", - "tt7947150", - "tt2783862", - "tt8733256", - "tt1648204", - "tt6443380", - "tt7246408", - "tt5068650", - "tt6097486", - "tt7001906", - "tt3731176", - "tt0050985", - "tt7983712", - "tt7227742", - "tt0091524", - "tt8193396", - "tt4908174", - "tt7013830", - "tt4899528", - "tt6269192", - "tt0076320", - "tt11353562", - "tt11112140", - "tt2566016", - "tt8563466", - "tt3219194", - "tt5901992", - "tt7604980", - "tt8811382", - "tt8179944", - "tt4681432", - "tt2179053", - "tt2771252", - "tt6131712", - "tt0103671", - "tt4068576", - "tt1273219", - "tt4781446", - "tt0261289", - "tt8236336", - "tt0112346", - "tt0417791", - "tt4340072", - "tt0053351", - "tt4211312", - "tt0166158", - "tt0451239", - "tt5068754", - "tt0165477", - "tt5012620", - "tt5709536", - "tt0044851", - "tt0040582", - "tt0098625", - "tt0116165", - "tt0230838", - "tt5578604", - "tt6673098", - "tt0090357", - "tt6051424", - "tt0258470", - "tt0396592", - "tt3313314", - "tt0295455", - "tt0033754", - "tt8758086", - "tt8128188", - "tt0118556", - "tt1846442", - "tt10223052", - "tt1743360", - "tt8617648", - "tt3745558", - "tt5839328", - "tt4410770", - "tt8514564", - "tt2891456", - "tt6449354", - "tt3396820", - "tt5753806", - "tt6828722", - "tt5584796", - "tt9448892", - "tt7857374", - "tt0096189", - "tt0033723", - "tt0055514", - "tt0043425", - "tt7027210", - "tt4956270", - "tt0045468", - "tt0035555", - "tt5821150", - "tt8888808", - "tt10011508", - "tt5000686", - "tt7153134", - "tt0077850", - "tt0106912", - "tt0041085", - "tt8302386", - "tt6959300", - "tt0039226", - "tt0086508", - "tt7850334", - "tt3921694", - "tt0770772", - "tt4594836", - "tt6433880", - "tt4902260", - "tt7335710", - "tt6145232", - "tt7842288", - "tt1000771", - "tt0288415", - "tt0240515", - "tt2894338", - "tt5258074", - "tt8781414", - "tt0120510", - "tt0499554", - "tt0376108", - "tt0123987", - "tt2762506", - "tt5826432", - "tt0217630", - "tt10531134", - "tt5249200", - "tt1899324", - "tt8106596", - "tt1235187", - "tt2084872", - "tt5873216", - "tt0112667", - "tt4453560", - "tt4144504", - "tt0492619", - "tt7176052", - "tt0403217", - "tt4424350", - "tt4912622", - "tt0283084", - "tt7497366", - "tt4279250", - "tt5978724", - "tt3163224", - "tt3666024", - "tt2342700", - "tt2085957", - "tt6970798", - "tt7362370", - "tt3581436", - "tt6054846", - "tt4199898", - "tt3838634", - "tt6105774", - "tt0090713", - "tt7632274", - "tt0472268", - "tt0081032", - "tt0993775", - "tt6473542", - "tt8047262", - "tt0057887", - "tt0086370", - "tt1508274", - "tt5095010", - "tt0818170", - "tt1566503", - "tt0072747", - "tt0107612", - "tt1719030", - "tt4823434", - "tt6856592", - "tt6665988", - "tt2279105", - "tt3686272", - "tt3349884", - "tt2837574", - "tt4794416", - "tt5070130", - "tt2384296", - "tt11156614", - "tt5340300", - "tt6114206", - "tt0064276", - "tt5153588", - "tt4600300", - "tt9398640", - "tt10971520", - "tt6728264", - "tt9725216", - "tt0121766", - "tt8882390", - "tt0116488", - "tt2084977", - "tt0449880", - "tt0259393", - "tt0759612", - "tt0105017", - "tt11310004", - "tt9844368", - "tt0357054", - "tt7303530", - "tt0244803", - "tt6884200", - "tt0096871", - "tt0326901", - "tt0096870", - "tt8764582", - "tt3467914", - "tt1258130", - "tt7764186", - "tt1735190", - "tt7475832", - "tt1999130", - "tt0089002", - "tt3629834", - "tt0095178", - "tt0038777", - "tt0057298", - "tt1506435", - "tt5516586", - "tt7288378", - "tt2362006", - "tt10477858", - "tt0111187", - "tt0114168", - "tt0113097", - "tt1105745", - "tt0082288", - "tt5132392", - "tt6798422", - "tt4948858", - "tt8871254", - "tt3898028", - "tt0117742", - "tt5090828", - "tt5304248", - "tt1245733", - "tt0473333", - "tt0047034", - "tt5275830", - "tt0102782", - "tt0098343", - "tt0119576", - "tt0107941", - "tt0314725", - "tt7356166", - "tt7440524", - "tt0120152", - "tt0183659", - "tt0469835", - "tt0098356", - "tt7207238", - "tt7058016", - "tt0262571", - "tt5536736", - "tt10875028", - "tt7357302", - "tt7026362", - "tt3382636", - "tt3304688", - "tt8618712", - "tt4520340", - "tt0236348", - "tt0960864", - "tt5493944", - "tt0324554", - "tt5420870", - "tt0104695", - "tt0465430", - "tt0313196", - "tt0208874", - "tt0481522", - "tt0095646", - "tt11336698", - "tt6263260", - "tt4615318", - "tt2130048", - "tt3445270", - "tt6214958", - "tt1822395", - "tt6333064", - "tt4694518", - "tt4133102", - "tt0112572", - "tt0115641", - "tt0889595", - "tt1522259", - "tt1855134", - "tt6214722", - "tt2198209", - "tt0361696", - "tt5580392", - "tt0436971", - "tt0089997", - "tt1327763", - "tt0116669", - "tt0099493", - "tt5067958", - "tt1707818", - "tt0466766", - "tt8005336", - "tt3846674", - "tt5562652", - "tt0325596", - "tt0381966", - "tt5775194", - "tt0149691", - "tt2770480", - "tt9169764", - "tt4085238", - "tt0039323", - "tt0011237", - "tt5553962", - "tt9078564", - "tt4756770", - "tt9373386", - "tt0111102", - "tt3383214", - "tt7248144", - "tt0483361", - "tt0296711", - "tt0086110", - "tt0110364", - "tt6250554", - "tt0404203", - "tt0265417", - "tt0972544", - "tt5073652", - "tt0083093", - "tt0109909", - "tt7170950", - "tt4109998", - "tt0883398", - "tt0101635", - "tt0119859", - "tt6014556", - "tt8527036", - "tt0083158", - "tt10003516", - "tt1475149", - "tt4729990", - "tt7543072", - "tt6220290", - "tt0098184", - "tt0033806", - "tt1535080", - "tt5704748", - "tt6910734", - "tt3778354", - "tt0454987", - "tt0096193", - "tt1054118", - "tt6699114", - "tt1229367", - "tt0384504", - "tt0280778", - "tt0281190", - "tt4866214", - "tt0125971", - "tt7426120", - "tt0250202", - "tt0280969", - "tt7310916", - "tt6714534", - "tt6868646", - "tt4263780", - "tt4729642", - "tt3390376", - "tt0035807", - "tt3743068", - "tt0071791", - "tt0205271", - "tt4920360", - "tt6303872", - "tt1144815", - "tt5503686", - "tt0491720", - "tt6874964", - "tt6474040", - "tt2040504", - "tt6348244", - "tt2119463", - "tt2273321", - "tt0082122", - "tt0105107", - "tt1814836", - "tt6142496", - "tt0331488", - "tt1087457", - "tt0116260", - "tt0064875", - "tt6218358", - "tt4827922", - "tt0212910", - "tt0800115", - "tt5931144", - "tt0120390", - "tt0765439", - "tt6959298", - "tt6498644", - "tt7420292", - "tt0330136", - "tt6959310", - "tt4270874", - "tt8396294", - "tt0325258", - "tt1309379", - "tt0827521", - "tt7125498", - "tt0111693", - "tt2069985", - "tt6131208", - "tt7689940", - "tt0780565", - "tt0045478", - "tt3213062", - "tt0044926", - "tt0768172", - "tt0059347", - "tt7042838", - "tt0126916", - "tt0097179", - "tt5420848", - "tt4613254", - "tt0257510", - "tt0208993", - "tt0113737", - "tt0077482", - "tt2188220", - "tt0096735", - "tt0116905", - "tt5566778", - "tt2462764", - "tt9154456", - "tt9356444", - "tt5840448", - "tt0818602", - "tt6896536", - "tt2577990", - "tt6628386", - "tt0272152", - "tt4468600", - "tt8041922", - "tt0279778", - "tt2709656", - "tt5788462", - "tt7169100", - "tt4958390", - "tt7741530", - "tt0184907", - "tt0179116", - "tt0099460", - "tt6333072", - "tt5952526", - "tt6502208", - "tt2499358", - "tt3110982", - "tt0158131", - "tt3980530", - "tt0140697", - "tt4987454", - "tt1587422", - "tt0171580", - "tt0116527", - "tt0117737", - "tt1560959", - "tt7601296", - "tt8009578", - "tt3313182", - "tt1340765", - "tt5541330", - "tt0364343", - "tt5459456", - "tt10292722", - "tt3302636", - "tt3922798", - "tt6436270", - "tt5211694", - "tt7131622", - "tt9178986", - "tt1118687", - "tt11243364", - "tt7945938", - "tt1111876", - "tt9699028", - "tt5113040", - "tt2321269", - "tt6250876", - "tt4898564", - "tt1558250", - "tt6475636", - "tt0778661", - "tt0096321", - "tt0851578", - "tt0072424", - "tt0109015", - "tt5596034", - "tt0066327", - "tt0097332", - "tt1079372", - "tt0112537", - "tt8156742", - "tt7967580", - "tt10410186", - "tt1480660", - "tt0103280", - "tt0240944", - "tt3799372", - "tt0371190", - "tt5431600", - "tt7605084", - "tt1160629", - "tt8163814", - "tt0480268", - "tt0380609", - "tt1202514", - "tt2551894", - "tt1146439", - "tt4105700", - "tt4778424", - "tt4558532", - "tt4643048", - "tt3593916", - "tt5517438", - "tt1671493", - "tt6928060", - "tt3458194", - "tt1340844", - "tt4264544", - "tt7775430", - "tt1813261", - "tt1104006", - "tt0426578", - "tt4585080", - "tt1309449", - "tt1438522", - "tt4853154", - "tt1394259", - "tt11009598", - "tt7056772", - "tt1703938", - "tt0065217", - "tt5163074", - "tt4779518", - "tt10738914", - "tt6163142", - "tt4872078", - "tt1885440", - "tt7183826", - "tt4820278", - "tt11078522", - "tt4693788", - "tt6292874", - "tt0098638", - "tt2668134", - "tt4851852", - "tt11078434", - "tt4880572", - "tt11162974", - "tt0181907", - "tt0300015", - "tt10443844", - "tt1575539", - "tt3754976", - "tt8235296", - "tt3526622", - "tt0089847", - "tt6022946", - "tt1976010", - "tt2370224", - "tt0286152", - "tt0087951", - "tt0219854", - "tt0278731", - "tt5834800", - "tt4076258", - "tt0411195", - "tt0240462", - "tt0105820", - "tt0337812", - "tt7631348", - "tt1362264", - "tt0167203", - "tt0906599", - "tt8569230", - "tt0102951", - "tt6116568", - "tt0472602", - "tt1572306", - "tt2469200", - "tt1423636", - "tt0093857", - "tt4720316", - "tt3073898", - "tt8435268", - "tt1105729", - "tt0113670", - "tt3327086", - "tt0449061", - "tt1694015", - "tt2443356", - "tt4898730", - "tt0927627", - "tt7798634", - "tt1682886", - "tt4882376", - "tt5174234", - "tt2582576", - "tt0106188", - "tt4928814", - "tt0065234", - "tt6170484", - "tt3291148", - "tt0041699", - "tt0424880", - "tt11136006", - "tt0097986", - "tt0196516", - "tt2332623", - "tt1980185", - "tt0361841", - "tt0080839", - "tt0058324", - "tt0095236", - "tt0091188", - "tt1702014", - "tt0498505", - "tt0083967", - "tt8510488", - "tt0188640", - "tt0118301", - "tt7689424", - "tt10810424", - "tt0815244", - "tt0084210", - "tt0067773", - "tt7715070", - "tt6211502", - "tt0119123", - "tt5949038", - "tt0275022", - "tt5361326", - "tt0279286", - "tt0118804", - "tt4209900", - "tt0780486", - "tt3183936", - "tt7140696", - "tt4007248", - "tt0202046", - "tt0942378", - "tt3893664", - "tt0144604", - "tt4179582", - "tt0810823", - "tt4461838", - "tt0109403", - "tt0209322", - "tt0167427", - "tt1132623", - "tt4959876", - "tt0386504", - "tt0120633", - "tt4056808", - "tt9358398", - "tt2102497", - "tt4074296", - "tt4443784", - "tt0293815", - "tt8289196", - "tt7370936", - "tt0107611", - "tt10922508", - "tt3975556", - "tt3771668", - "tt0762115", - "tt6662736", - "tt0985593", - "tt1995346", - "tt0113682", - "tt3663200", - "tt2760202", - "tt7968976", - "tt4080400", - "tt2365580", - "tt7541632", - "tt3505754", - "tt4790268", - "tt3492900", - "tt7498092", - "tt3503924", - "tt5956016", - "tt11163014", - "tt0473308", - "tt6197028", - "tt6659414", - "tt1054485", - "tt10768782", - "tt3864056", - "tt0037536", - "tt1356790", - "tt10794834", - "tt7488288", - "tt5168238", - "tt3663564", - "tt0905627", - "tt2369105", - "tt8169994", - "tt0069761", - "tt7470850", - "tt0384929", - "tt0095846", - "tt0117427", - "tt0157472", - "tt0272147", - "tt5650964", - "tt4911876", - "tt0179098", - "tt0141907", - "tt0120550", - "tt4005510", - "tt8331988", - "tt0141109", - "tt1699231", - "tt2582784", - "tt4144350", - "tt0218043", - "tt0116151", - "tt0420087", - "tt2823574", - "tt2266938", - "tt0093919", - "tt7115500", - "tt4319112", - "tt7043176", - "tt5813808", - "tt4106028", - "tt4218538", - "tt0085689", - "tt2022568", - "tt3243630", - "tt0404030", - "tt8804688", - "tt11067442", - "tt8923482", - "tt8948614", - "tt2114490", - "tt0841032", - "tt0368075", - "tt6499516", - "tt0120823", - "tt10345022", - "tt0081375", - "tt5359048", - "tt2354395", - "tt7216068", - "tt0245238", - "tt3843748", - "tt9082152", - "tt6170202", - "tt0124879", - "tt3496818", - "tt0488349", - "tt0055895", - "tt2237012", - "tt0099623", - "tt5688996", - "tt0191037", - "tt0234829", - "tt0118836", - "tt3401190", - "tt2363483", - "tt0470995", - "tt3628574", - "tt2649882", - "tt0165361", - "tt1967651", - "tt0107117", - "tt3817848", - "tt0361715", - "tt0109035", - "tt0195778", - "tt0414853", - "tt8503170", - "tt6972670", - "tt6640526", - "tt0116552", - "tt2125490", - "tt0384810", - "tt0143261", - "tt0878673", - "tt0044036", - "tt1727825", - "tt9842634", - "tt1836974", - "tt3443208", - "tt9107368", - "tt2710694", - "tt2652118", - "tt0466342", - "tt0293088", - "tt5651952", - "tt3652142", - "tt9742422", - "tt9459550", - "tt9143166", - "tt5937964", - "tt6102062", - "tt7696976", - "tt0138818", - "tt1222818", - "tt6710606", - "tt0041182", - "tt11210886", - "tt2049559", - "tt0253378", - "tt5963066", - "tt1208647", - "tt0368709", - "tt3797276", - "tt7094436", - "tt0093407", - "tt2076346", - "tt0042963", - "tt0386792", - "tt4827442", - "tt2634296", - "tt2369317", - "tt4703182", - "tt6513120", - "tt2615952", - "tt7595276", - "tt1977941", - "tt11096888", - "tt0110213", - "tt5037358", - "tt3756780", - "tt2378587", - "tt0190138", - "tt0098331", - "tt3077108", - "tt9021104", - "tt0046937", - "tt2056663", - "tt0116361", - "tt4769836", - "tt5908294", - "tt7056864", - "tt6152554", - "tt0828158", - "tt0109305", - "tt0299930", - "tt0048624", - "tt4782322", - "tt5849622", - "tt0453548", - "tt2144008", - "tt3244744", - "tt0140796", - "tt3518988", - "tt0417001", - "tt5889292", - "tt0098165", - "tt0117909", - "tt0049762", - "tt5126220", - "tt0317910", - "tt7239700", - "tt5929776", - "tt0119381", - "tt0050974", - "tt0479044", - "tt0102011", - "tt2011300", - "tt0085366", - "tt0141974", - "tt0101669", - "tt0133189", - "tt3615160", - "tt4929038", - "tt0477731", - "tt6472116", - "tt2527050", - "tt3211400", - "tt0396652", - "tt0107870", - "tt0315297", - "tt0076786", - "tt2457324", - "tt1326194", - "tt0015772", - "tt0078907", - "tt0300633", - "tt3589352", - "tt0017162", - "tt0064373", - "tt1679235", - "tt7207478", - "tt4839118", - "tt6582782", - "tt8338940", - "tt0109484", - "tt11057118", - "tt0099750", - "tt0120834", - "tt6428150", - "tt0298408", - "tt0111712", - "tt5291714", - "tt0266452", - "tt0362526", - "tt8772262", - "tt0080853", - "tt6080418", - "tt7444978", - "tt0382073", - "tt1942971", - "tt0091338", - "tt0095488", - "tt8529066", - "tt7029788", - "tt8228172", - "tt0031971", - "tt0099878", - "tt0893367", - "tt0094321", - "tt0048570", - "tt0052877", - "tt0082163", - "tt5670364", - "tt7394770", - "tt0126604", - "tt0338467", - "tt0194368", - "tt0392878", - "tt1754316", - "tt2512236", - "tt8412232", - "tt1152758", - "tt3914332", - "tt8951058", - "tt0212974", - "tt4151094", - "tt2133214", - "tt3085312", - "tt1104733", - "tt4396584", - "tt3512160", - "tt0095687", - "tt3960240", - "tt0272020", - "tt0100486", - "tt3129350", - "tt5492260", - "tt0448120", - "tt3869356", - "tt2384022", - "tt3760162", - "tt7235502", - "tt2119373", - "tt5708154", - "tt0364569", - "tt6698648", - "tt5912600", - "tt3710938", - "tt0456014", - "tt1320347", - "tt3079568", - "tt5737862", - "tt0323120", - "tt0140174", - "tt5355868", - "tt3164754", - "tt3643544", - "tt10172550", - "tt9465600", - "tt6425560", - "tt4462372", - "tt7117594", - "tt6071704", - "tt0167752", - "tt5342090", - "tt7978548", - "tt0266425", - "tt3973724", - "tt0299458", - "tt0069865", - "tt3475058", - "tt7639502", - "tt4286468", - "tt2261427", - "tt6436888", - "tt0110395", - "tt0331953", - "tt0119210", - "tt3552592", - "tt5539284", - "tt1707378", - "tt6260468", - "tt3586044", - "tt0200469", - "tt2163606", - "tt7830584", - "tt8197418", - "tt2492344", - "tt5223878", - "tt8029682", - "tt0298045", - "tt2452386", - "tt1839390", - "tt0097618", - "tt5236424", - "tt0997147", - "tt1091229", - "tt1776143", - "tt0446046", - "tt0084719", - "tt0280665", - "tt0044110", - "tt0256459", - "tt5617916", - "tt7165212", - "tt1323518", - "tt3108970", - "tt8897046", - "tt8009518", - "tt6567708", - "tt2264978", - "tt6937070", - "tt4443974", - "tt0120683", - "tt8665150", - "tt11010272", - "tt0250274", - "tt4295294", - "tt0115493", - "tt0273108", - "tt0180073", - "tt1294161", - "tt0350028", - "tt0084088", - "tt0094027", - "tt0393735", - "tt0117958", - "tt0082992", - "tt0077305", - "tt0087550", - "tt0116913", - "tt0403455", - "tt0097142", - "tt0092638", - "tt1512738", - "tt0110363", - "tt0243232", - "tt0120122", - "tt0084049", - "tt0097570", - "tt6244730", - "tt1059793", - "tt0107443", - "tt1786530", - "tt0297753", - "tt0082822", - "tt0053271", - "tt4792524", - "tt3515524", - "tt2392435", - "tt5072612", - "tt3644258", - "tt0176783", - "tt3711196", - "tt3487610", - "tt5143968", - "tt0072249", - "tt5106042", - "tt7422638", - "tt6874542", - "tt4329516", - "tt6769326", - "tt9352780", - "tt4117338", - "tt0225071", - "tt5369246", - "tt3127902", - "tt0205000", - "tt0253798", - "tt4497416", - "tt10644808", - "tt6744044", - "tt2917506", - "tt3212026", - "tt0144550", - "tt3794552", - "tt8751928", - "tt0367652", - "tt4737992", - "tt3065448", - "tt0850667", - "tt4780578", - "tt6426700", - "tt6184894", - "tt8169942", - "tt9617448", - "tt10883004", - "tt4664460", - "tt4632316", - "tt0233142", - "tt0113533", - "tt6223932", - "tt0068659", - "tt1792576", - "tt0111205", - "tt4552112", - "tt3626436", - "tt3288948", - "tt0280460", - "tt0403016", - "tt5993468", - "tt0425123", - "tt6781498", - "tt3786326", - "tt3065132", - "tt6235008", - "tt0104225", - "tt4034930", - "tt4406298", - "tt0329028", - "tt6384720", - "tt1052024", - "tt5338774", - "tt0111477", - "tt3243772", - "tt1754137", - "tt4431208", - "tt0867149", - "tt7319064", - "tt1650393", - "tt3666644", - "tt3557464", - "tt0274468", - "tt5783956", - "tt0301526", - "tt6387232", - "tt9364406", - "tt7706168", - "tt0314498", - "tt0240900", - "tt0361925", - "tt0376105", - "tt6398496", - "tt2129990", - "tt6535100", - "tt0090852", - "tt8890058", - "tt10156020", - "tt6899068", - "tt0065398", - "tt10203940", - "tt8667120", - "tt10920376", - "tt6412076", - "tt10243678", - "tt7809198", - "tt0074799", - "tt2140507", - "tt5564336", - "tt0069992", - "tt7275352", - "tt7043070", - "tt8378126", - "tt1043904", - "tt4471634", - "tt9248032", - "tt2899142", - "tt5963132", - "tt10262168", - "tt9238392", - "tt7983890", - "tt1881109", - "tt8707008", - "tt0271259", - "tt0970965", - "tt0089543", - "tt0499234", - "tt0106246", - "tt0448663", - "tt0105381", - "tt3983642", - "tt4844288", - "tt0396705", - "tt0086429", - "tt3295244", - "tt6167116", - "tt4093896", - "tt0160495", - "tt5792472", - "tt0095916", - "tt0059287", - "tt0250797", - "tt1285252", - "tt2821314", - "tt6846432", - "tt3552348", - "tt8725518", - "tt7133092", - "tt4979826", - "tt1346973", - "tt3403310", - "tt0118926", - "tt0091869", - "tt7588798", - "tt0345591", - "tt0051687", - "tt1823096", - "tt2766804", - "tt9316022", - "tt2937366", - "tt0110917", - "tt0118708", - "tt0102737", - "tt3021984", - "tt8421698", - "tt0473074", - "tt7948328", - "tt0101924", - "tt1517476", - "tt0489037", - "tt8196200", - "tt0097348", - "tt8634202", - "tt5644740", - "tt0114134", - "tt0090196", - "tt4561398", - "tt1623759", - "tt7609180", - "tt5117428", - "tt0076902", - "tt7240478", - "tt0102328", - "tt0783518", - "tt0290332", - "tt0189456", - "tt0419434", - "tt6803212", - "tt1572008", - "tt0111701", - "tt0099819", - "tt0108065", - "tt0070942", - "tt2339739", - "tt2304583", - "tt1964758", - "tt5492054", - "tt7309384", - "tt3579192", - "tt2125685", - "tt3749926", - "tt7212266", - "tt0433116", - "tt0374536", - "tt3616292", - "tt0285462", - "tt5575258", - "tt7812828", - "tt2429278", - "tt0178988", - "tt4991512", - "tt0493430", - "tt0401410", - "tt2766790", - "tt4267026", - "tt5269968", - "tt8493638", - "tt8707374", - "tt0071199", - "tt6027490", - "tt1319733", - "tt1276434", - "tt0031002", - "tt2362991", - "tt0109053", - "tt1827402", - "tt0441303", - "tt5335244", - "tt6189022", - "tt1832355", - "tt0095409", - "tt0041776", - "tt3074856", - "tt0282687", - "tt6375308", - "tt3735398", - "tt6615426", - "tt4760804", - "tt0118966", - "tt0118887", - "tt4103992", - "tt0065872", - "tt0498900", - "tt4627352", - "tt5791536", - "tt5792468", - "tt1363127", - "tt7474562", - "tt3626504", - "tt0087718", - "tt0120185", - "tt0294345", - "tt0782867", - "tt3675204", - "tt2338454", - "tt3268458", - "tt0378306", - "tt8126390", - "tt2388771", - "tt8858104", - "tt0113028", - "tt5278506", - "tt7683148", - "tt0059501", - "tt3837248", - "tt0108656", - "tt0023249", - "tt0101510", - "tt1454545", - "tt0400497", - "tt0165232", - "tt2631072", - "tt0069426", - "tt0108105", - "tt3159812", - "tt1975368", - "tt0114496", - "tt3952614", - "tt0217756", - "tt3140724", - "tt9028880", - "tt0229002", - "tt0466399", - "tt11015752", - "tt0039895", - "tt0067433", - "tt0372237", - "tt0073605", - "tt0049856", - "tt0024794", - "tt0059232", - "tt0107719", - "tt0048055", - "tt6794424", - "tt0192528", - "tt1355235", - "tt0042379", - "tt0064073", - "tt0039022", - "tt5433114", - "tt6608032", - "tt5834854", - "tt0067774", - "tt2259318", - "tt0116817", - "tt0079753", - "tt5932330", - "tt0118686", - "tt0076044", - "tt0107009", - "tt0295725", - "tt4659728", - "tt0460766", - "tt0075807", - "tt1543511", - "tt0196267", - "tt7605144", - "tt5110386", - "tt2974068", - "tt0069866", - "tt2180571", - "tt2358806", - "tt3266724", - "tt3004852", - "tt6079702", - "tt11023738", - "tt0432291", - "tt5974050", - "tt0119310", - "tt3040528", - "tt8976032", - "tt0094006", - "tt0107107", - "tt6956798", - "tt6843446", - "tt6566768", - "tt3219686", - "tt4206250", - "tt0110712", - "tt6206364", - "tt10577906", - "tt4967298", - "tt5677598", - "tt0104837", - "tt7666724", - "tt4147238", - "tt9384954", - "tt5751588", - "tt1237962", - "tt1735357", - "tt4795730", - "tt6195904", - "tt0118870", - "tt7919810", - "tt1288406", - "tt0981072", - "tt1673381", - "tt7846056", - "tt8178486", - "tt4729430", - "tt0077303", - "tt5066818", - "tt3467440", - "tt2929690", - "tt10938576", - "tt10915826", - "tt0462482", - "tt8963288", - "tt6053440", - "tt1071780", - "tt0339034", - "tt0438123", - "tt0323572", - "tt6175670", - "tt5725368", - "tt1822394", - "tt0412922", - "tt1003165", - "tt0236640", - "tt1639084", - "tt4060244", - "tt0117293", - "tt1813652", - "tt0074205", - "tt0095515", - "tt2352196", - "tt1515195", - "tt0046874", - "tt4682780", - "tt5165878", - "tt0225882", - "tt4532280", - "tt6921496", - "tt1009017", - "tt0058981", - "tt3456784", - "tt0075793", - "tt2403867", - "tt3480056", - "tt0111333", - "tt0112772", - "tt7272948", - "tt0970521", - "tt0102585", - "tt0108640", - "tt0915460", - "tt0067144", - "tt0087134", - "tt0092863", - "tt0119375", - "tt8009314", - "tt5587022", - "tt5758302", - "tt1153690", - "tt2200022", - "tt0058191", - "tt0443737", - "tt6644286", - "tt1354553", - "tt0085356", - "tt10886732", - "tt0201820", - "tt0427411", - "tt1277736", - "tt0214641", - "tt0454808", - "tt0283530", - "tt10413458", - "tt7240298", - "tt5432342", - "tt4188442", - "tt3612320", - "tt0335559", - "tt3373410", - "tt8453538", - "tt0443496", - "tt5246700", - "tt0111418", - "tt5596104", - "tt3762974", - "tt0120604", - "tt9389444", - "tt0283139", - "tt0231402", - "tt6253688", - "tt7707314", - "tt0097481", - "tt0469689", - "tt2619512", - "tt5533228", - "tt5253074", - "tt4031126", - "tt7288562", - "tt0286788", - "tt0072152", - "tt2351417", - "tt4622018", - "tt1140941", - "tt3910512", - "tt10701384", - "tt2191805", - "tt5117876", - "tt1497874", - "tt8167872", - "tt0218378", - "tt0102768", - "tt6078458", - "tt6095472", - "tt0252501", - "tt0076106", - "tt2385211", - "tt6541512", - "tt0430457", - "tt4936176", - "tt0086361", - "tt0092042", - "tt0757361", - "tt0071288", - "tt6338506", - "tt3111864", - "tt7284204", - "tt2340650", - "tt7214470", - "tt0098966", - "tt0066492", - "tt0120662", - "tt0463996", - "tt0131436", - "tt0076059", - "tt0473464", - "tt8488126", - "tt7415466", - "tt0448166", - "tt0083745", - "tt6984258", - "tt0076138", - "tt3711708", - "tt0056596", - "tt0120847", - "tt4702826", - "tt9213244", - "tt7125774", - "tt11062388", - "tt8068768", - "tt7370952", - "tt0082926", - "tt3300542", - "tt6613958", - "tt11108064", - "tt9637246", - "tt2302755", - "tt7422926", - "tt4473054", - "tt0076762", - "tt0120094", - "tt7653006", - "tt1103221", - "tt5472372", - "tt0078326", - "tt6105406", - "tt3983674", - "tt0091019", - "tt0077199", - "tt1964650", - "tt0078024", - "tt2523832", - "tt3884528", - "tt1054588", - "tt3750976", - "tt0282171", - "tt0104487", - "tt3691270", - "tt0365125", - "tt0102687", - "tt5227606", - "tt0359692", - "tt6222300", - "tt1242460", - "tt0240913", - "tt5034212", - "tt6522666", - "tt5989336", - "tt0356680", - "tt0037008", - "tt0054073", - "tt0023427", - "tt1065332", - "tt1646973", - "tt0028096", - "tt0065571", - "tt0246692", - "tt0098253", - "tt0038206", - "tt0384369", - "tt0097396", - "tt0065649", - "tt0092978", - "tt0059619", - "tt0052847", - "tt0091251", - "tt0099776", - "tt0038419", - "tt0032186", - "tt0078054", - "tt6949398", - "tt10262492", - "tt7659018", - "tt6492020", - "tt10499474", - "tt2359085", - "tt8399718", - "tt2516874", - "tt1957867", - "tt1350498", - "tt10691094", - "tt7710160", - "tt1789074", - "tt8069578", - "tt10719844", - "tt0040341", - "tt0040755", - "tt7947624", - "tt5987700", - "tt1137996", - "tt10720474", - "tt5246928", - "tt3431188", - "tt0166674", - "tt10327518", - "tt0368688", - "tt0040197", - "tt7477068", - "tt0155578", - "tt1336621", - "tt6805354", - "tt0067559", - "tt0102517", - "tt7547410", - "tt0093845", - "tt0062885", - "tt10920662", - "tt8022928", - "tt1150934", - "tt0407121", - "tt8760684", - "tt0093342", - "tt0117966", - "tt0478832", - "tt0469810", - "tt0223783", - "tt7908312", - "tt1365050", - "tt3832326", - "tt1183921", - "tt11121556", - "tt0139418", - "tt4027794", - "tt3329654", - "tt0183882", - "tt6576556", - "tt7471706", - "tt4786020", - "tt3840082", - "tt1528792", - "tt4131208", - "tt1323926", - "tt0115434", - "tt7951242", - "tt0314691", - "tt0052765", - "tt2389290", - "tt1261422", - "tt0479852", - "tt1739303", - "tt0117093", - "tt6333086", - "tt2960304", - "tt0206871", - "tt0033722", - "tt0422515", - "tt0293359", - "tt6285672", - "tt6887162", - "tt0234964", - "tt5592878", - "tt3089326", - "tt1124078", - "tt0131356", - "tt5128790", - "tt0156246", - "tt0207961", - "tt0194894", - "tt3146022", - "tt0289374", - "tt0101998", - "tt5047336", - "tt0115438", - "tt0065560", - "tt1764666", - "tt4870510", - "tt5083366", - "tt0130121", - "tt0103850", - "tt0060462", - "tt2216088", - "tt6068406", - "tt0318974", - "tt7546024", - "tt4009728", - "tt0228750", - "tt2124959", - "tt5127214", - "tt0109288", - "tt0314119", - "tt0179471", - "tt3393164", - "tt0079771", - "tt2386237", - "tt8425058", - "tt6964538", - "tt6343988", - "tt0107090", - "tt0326856", - "tt0067650", - "tt0119950", - "tt7528342", - "tt0421090", - "tt7977162", - "tt5952266", - "tt0338556", - "tt7689926", - "tt2278050", - "tt6082630", - "tt0421994", - "tt2766882", - "tt7830428", - "tt5368354", - "tt5715832", - "tt3064356", - "tt0382621", - "tt0091159", - "tt8727494", - "tt2277106", - "tt2091427", - "tt0050181", - "tt5265964", - "tt5266668", - "tt0451094", - "tt3209560", - "tt4680980", - "tt6668974", - "tt0160338", - "tt1054115", - "tt0913399", - "tt0481519", - "tt0082958", - "tt11043546", - "tt3920820", - "tt6464678", - "tt0114466", - "tt6339230", - "tt0091631", - "tt0473692", - "tt1322393", - "tt5873150", - "tt3533612", - "tt6146590", - "tt1426748", - "tt0435617", - "tt0091183", - "tt0119190", - "tt5098712", - "tt2548738", - "tt0079640", - "tt0832318", - "tt0228156", - "tt0077621", - "tt4504438", - "tt0203755", - "tt0079639", - "tt2075352", - "tt0097500", - "tt6948354", - "tt5786184", - "tt3970854", - "tt5834362", - "tt2011325", - "tt0076913", - "tt0186589", - "tt0306734", - "tt8774388", - "tt5158844", - "tt3300712", - "tt7222228", - "tt0250425", - "tt9028784", - "tt8634192", - "tt9032562", - "tt6021694", - "tt3661570", - "tt9033712", - "tt6802950", - "tt7714138", - "tt1950235", - "tt5133572", - "tt7164084", - "tt6992230", - "tt8160744", - "tt7511008", - "tt4477292", - "tt6727816", - "tt6842446", - "tt4054008", - "tt7315484", - "tt8242340", - "tt7428884", - "tt1605782", - "tt6472234", - "tt10691312", - "tt10691126", - "tt2072910", - "tt9866208", - "tt2755860", - "tt0089523", - "tt6163094", - "tt0385700", - "tt0435286", - "tt0015116", - "tt1483421", - "tt0090302", - "tt0107947", - "tt0116743", - "tt6415100", - "tt3500600", - "tt8009906", - "tt7985692", - "tt0244000", - "tt5690810", - "tt8637428", - "tt7935908", - "tt6105098", - "tt8266310", - "tt0060168", - "tt0111845", - "tt7869818", - "tt2375454", - "tt5938190", - "tt8000908", - "tt5851598", - "tt8717590", - "tt3106314", - "tt5664676", - "tt4364194", - "tt0757194", - "tt0489048", - "tt4177856", - "tt1139662", - "tt0938281", - "tt9243946", - "tt0772181", - "tt0398029", - "tt7343762", - "tt0067390", - "tt0454914", - "tt0848281", - "tt0823172", - "tt0437954", - "tt1262945", - "tt0349747", - "tt0043751", - "tt1533089", - "tt0285154", - "tt1267160", - "tt0221889", - "tt7919372", - "tt5687968", - "tt0165859", - "tt1334537", - "tt0118851", - "tt0436629", - "tt2484530", - "tt7445552", - "tt0073911", - "tt0276919", - "tt2071600", - "tt0191133", - "tt0327919", - "tt7358154", - "tt1229791", - "tt0110971", - "tt3165632", - "tt0863136", - "tt5275872", - "tt3721924", - "tt2214863", - "tt0210567", - "tt10613550", - "tt8106568", - "tt5602204", - "tt0090840", - "tt0061591", - "tt0072245", - "tt0113104", - "tt6508770", - "tt0083542", - "tt1956594", - "tt0073903", - "tt3810760", - "tt1927067", - "tt2310316", - "tt6014904", - "tt2076895", - "tt10948366", - "tt10716748", - "tt0219592", - "tt6781982", - "tt5859882", - "tt9257484", - "tt0479937", - "tt0923683", - "tt0050681", - "tt2787302", - "tt0100014", - "tt1611944", - "tt0042052", - "tt0081793", - "tt0066970", - "tt0427968", - "tt4809590", - "tt0047263", - "tt0234105", - "tt1842448", - "tt2156536", - "tt3788052", - "tt7158904", - "tt10147936", - "tt10793634", - "tt7635550", - "tt10771556", - "tt0092796", - "tt0051887", - "tt7030194", - "tt8197058", - "tt5206770", - "tt10763618", - "tt6722976", - "tt0819129", - "tt0178935", - "tt9103028", - "tt1985064", - "tt0435670", - "tt6337910", - "tt4974254", - "tt5514008", - "tt7616148", - "tt2732286", - "tt0128364", - "tt7124092", - "tt6433106", - "tt0166960", - "tt7841536", - "tt11168100", - "tt8893402", - "tt0069989", - "tt0096171", - "tt0060737", - "tt0113967", - "tt9135272", - "tt7212878", - "tt7958644", - "tt6823080", - "tt0388183", - "tt2277840", - "tt6204148", - "tt0071772", - "tt8528334", - "tt0198494", - "tt1369845", - "tt0314412", - "tt5622660", - "tt0314786", - "tt0068639", - "tt2057449", - "tt0079807", - "tt3819718", - "tt1499069", - "tt0977648", - "tt2349677", - "tt2049586", - "tt0323298", - "tt0105698", - "tt0119326", - "tt6654082", - "tt6130118", - "tt2943352", - "tt7779590", - "tt0290296", - "tt1511532", - "tt5242100", - "tt7886614", - "tt3712822", - "tt0448100", - "tt6727598", - "tt0070731", - "tt0060165", - "tt2044040", - "tt0107889", - "tt0082010", - "tt1447482", - "tt0116313", - "tt8161914", - "tt0327036", - "tt10009796", - "tt6197400", - "tt0229553", - "tt4500214", - "tt0057063", - "tt0063625", - "tt0077942", - "tt4522922", - "tt0804551", - "tt0069080", - "tt0142201", - "tt3605266", - "tt1928320", - "tt0058371", - "tt1826550", - "tt3778086", - "tt0063811", - "tt0109206", - "tt2325761", - "tt8244578", - "tt3203290", - "tt0076149", - "tt5159024", - "tt2937390", - "tt0093133", - "tt3654796", - "tt0178431", - "tt2732932", - "tt5155780", - "tt0102910", - "tt0089129", - "tt0367623", - "tt0077289", - "tt0071554", - "tt0094002", - "tt2417912", - "tt1618434", - "tt0161860", - "tt0118040", - "tt0112792", - "tt5752356", - "tt0070358", - "tt5183500", - "tt0016394", - "tt1375669", - "tt0093650", - "tt0119588", - "tt0100974", - "tt0424359", - "tt0063740", - "tt3949644", - "tt0265739", - "tt0031208", - "tt0328049", - "tt1694580", - "tt0168780", - "tt8193978", - "tt0078867", - "tt10608842", - "tt10007978", - "tt0091658", - "tt2061756", - "tt11081044", - "tt0099040", - "tt0226872", - "tt0116516", - "tt9646240", - "tt6414392", - "tt6876788", - "tt10720384", - "tt0066002", - "tt0093800", - "tt0138545", - "tt1602572", - "tt2007360", - "tt0006736", - "tt0072010", - "tt0078087", - "tt8710502", - "tt0074510", - "tt7329656", - "tt0054649", - "tt0099719", - "tt0216767", - "tt9358196", - "tt3228830", - "tt0064243", - "tt0134664", - "tt0453383", - "tt0100827", - "tt0080881", - "tt7895904", - "tt0192111", - "tt0068186", - "tt6447022", - "tt0368447", - "tt0226875", - "tt0105880", - "tt0056289", - "tt6535880", - "tt2980086", - "tt0268397", - "tt0043972", - "tt0060748", - "tt0074798", - "tt0079486", - "tt0294594", - "tt1753597", - "tt3149612", - "tt0052555", - "tt0104839", - "tt6604174", - "tt0933064", - "tt0061931", - "tt0067647", - "tt5275838", - "tt0078288", - "tt0140340", - "tt1016301", - "tt0795352", - "tt0053899", - "tt5087564", - "tt0104014", - "tt0052104", - "tt6450428", - "tt0138078", - "tt3149536", - "tt5844286", - "tt7116548", - "tt7745068", - "tt0387954", - "tt2551516", - "tt0099637", - "tt0097336", - "tt7320560", - "tt0059379", - "tt0053145", - "tt0069124", - "tt0174931", - "tt3242640", - "tt0069073", - "tt0061173", - "tt0059244", - "tt0072827", - "tt7984766", - "tt2047910", - "tt1504489", - "tt7689910", - "tt5325030", - "tt6953526", - "tt3699150", - "tt11127056", - "tt0052655", - "tt3387520", - "tt0058753", - "tt0170054", - "tt9412098", - "tt2091476", - "tt9075778", - "tt7439748", - "tt9664078", - "tt11083568", - "tt0243575", - "tt1560169", - "tt6829222", - "tt3620846", - "tt0430634", - "tt0156647", - "tt0128278", - "tt8541394", - "tt3829884", - "tt4906148", - "tt8327962", - "tt0379306", - "tt3213622", - "tt1966575", - "tt0369441", - "tt7182240", - "tt0120613", - "tt4925028", - "tt0077716", - "tt6262764", - "tt0071514", - "tt0070068", - "tt0466875", - "tt0057905", - "tt0382189", - "tt9121906", - "tt4985906", - "tt3369134", - "tt4568312", - "tt0078856", - "tt6159268", - "tt0052950", - "tt0103678", - "tt0037146", - "tt0075005", - "tt5278464", - "tt6422192", - "tt1092633", - "tt1131727", - "tt3111516", - "tt2245084", - "tt1877647", - "tt0206534", - "tt6236738", - "tt0032232", - "tt7983348", - "tt0047642", - "tt1772263", - "tt1478839", - "tt0057718", - "tt0106262", - "tt1999167", - "tt0056355", - "tt1520392", - "tt4219130", - "tt0100156", - "tt0082045", - "tt0039391", - "tt0115535", - "tt0091396", - "tt0052829", - "tt0285503", - "tt5707754", - "tt0945355", - "tt3265462", - "tt0061549", - "tt0090753", - "tt0026164", - "tt0349205", - "tt3281920", - "tt0105888", - "tt5903088", - "tt0368774", - "tt8079880", - "tt8805702", - "tt5437148", - "tt6692264", - "tt0033804", - "tt6333084", - "tt0116462", - "tt0258255", - "tt0038203", - "tt0059794", - "tt1213574", - "tt0391891", - "tt5144236", - "tt0062980", - "tt0063102", - "tt4883512", - "tt0095262", - "tt0780622", - "tt0433416", - "tt0036290", - "tt6017364", - "tt0280720", - "tt0079965", - "tt0042411", - "tt0050895", - "tt3598178", - "tt2317796", - "tt0096808", - "tt0036232", - "tt7284952", - "tt6213810", - "tt5518168", - "tt8809652", - "tt0096343", - "tt0046534", - "tt6219314", - "tt3682686", - "tt6378942", - "tt7558302", - "tt0164393", - "tt3113836", - "tt5740868", - "tt7468616", - "tt0159508", - "tt0062804", - "tt0082914", - "tt0315824", - "tt7575642", - "tt0073014", - "tt5822564", - "tt8526872", - "tt0037219", - "tt2765192", - "tt9021184", - "tt2113788", - "tt3786198", - "tt0193166", - "tt0022886", - "tt6805862", - "tt3759912", - "tt0158736", - "tt0041308", - "tt0070242", - "tt0110516", - "tt0106753", - "tt0051145", - "tt2377700", - "tt0060420", - "tt1371630", - "tt7313348", - "tt2446990", - "tt1485134", - "tt7218812", - "tt1943873", - "tt0035799", - "tt3607812", - "tt1185836", - "tt1325619", - "tt0062762", - "tt7948818", - "tt0104510", - "tt8556014", - "tt5923026", - "tt5891122", - "tt0412904", - "tt0019130", - "tt1033501", - "tt0067169", - "tt0035376", - "tt5518022", - "tt6891976", - "tt7890408", - "tt4323370", - "tt5001130", - "tt3831344", - "tt0421239", - "tt6269942", - "tt2124162", - "tt9507276", - "tt2702724", - "tt7083846", - "tt8076344", - "tt0057360", - "tt3138664", - "tt5372528", - "tt10150694", - "tt2918988", - "tt5838300", - "tt0094103", - "tt5515814", - "tt8421156", - "tt6380398", - "tt6023560", - "tt4504188", - "tt0069818", - "tt7676816", - "tt8420442", - "tt0074562", - "tt4207112", - "tt0117723", - "tt1836776", - "tt0079239", - "tt0113851", - "tt1110048", - "tt3481232", - "tt3275362", - "tt0186202", - "tt5859140", - "tt0067531", - "tt6096254", - "tt6191876", - "tt0060155", - "tt0054453", - "tt0325537", - "tt0438488", - "tt9189566", - "tt6026700", - "tt0118540", - "tt1374989", - "tt0048304", - "tt6251666", - "tt0095812", - "tt0028346", - "tt0384833", - "tt0052389", - "tt0030418", - "tt0323033", - "tt0110759", - "tt0316824", - "tt6921112", - "tt7044010", - "tt0049026", - "tt0129982", - "tt5691856", - "tt3041032", - "tt11137384", - "tt6050668", - "tt7234202", - "tt5193790", - "tt6642662", - "tt8669212", - "tt5628902", - "tt2160125", - "tt8095862", - "tt7154284", - "tt5848986", - "tt0133089", - "tt3323940", - "tt3488668", - "tt6223974", - "tt7434402", - "tt0113010", - "tt0040795", - "tt2061563", - "tt6967162", - "tt4497846", - "tt0119896", - "tt0032676", - "tt1713991", - "tt0052529", - "tt0036182", - "tt0308152", - "tt7239076", - "tt6391732", - "tt0069729", - "tt0061738", - "tt2490148", - "tt2749282", - "tt4835636", - "tt0079828", - "tt0057473", - "tt4687410", - "tt0175047", - "tt4901304", - "tt0071671", - "tt0264150", - "tt7134296", - "tt8991264", - "tt4457716", - "tt1270296", - "tt3004544", - "tt3966544", - "tt1621641", - "tt0046008", - "tt4543902", - "tt0061795", - "tt0299977", - "tt1900908", - "tt2923256", - "tt0079146", - "tt0317219", - "tt0097527", - "tt0084472", - "tt8239806", - "tt0104449", - "tt1196121", - "tt0091223", - "tt0119675", - "tt1139797", - "tt0069341", - "tt0239641", - "tt0330634", - "tt3289956", - "tt0093220", - "tt0115963", - "tt0114608", - "tt2526422", - "tt10452224", - "tt0108539", - "tt0089885", - "tt10051586", - "tt0144814", - "tt0081334", - "tt0035689", - "tt1228987", - "tt0214388", - "tt0032138", - "tt0070518", - "tt0048634", - "tt1342122", - "tt0837122", - "tt3651804", - "tt0059518", - "tt2317088", - "tt2466320", - "tt0073496", - "tt0074777", - "tt2090629", - "tt0055458", - "tt0899270", - "tt3911554", - "tt0056964", - "tt1474897", - "tt2287170", - "tt0077254", - "tt0060814", - "tt0308208", - "tt5632272", - "tt0251075", - "tt0460812", - "tt0113438", - "tt0065537", - "tt0095638", - "tt1567279", - "tt0044466", - "tt0478802", - "tt0030857", - "tt0059358", - "tt2058620", - "tt1535615", - "tt1016226", - "tt1704721", - "tt0933874", - "tt4459806", - "tt0398286", - "tt2011265", - "tt1742327", - "tt2256826", - "tt0051476", - "tt0218619", - "tt0053957", - "tt3162856", - "tt0119109", - "tt0186253", - "tt1918908", - "tt0494716", - "tt2554274", - "tt0101516", - "tt0031580", - "tt0210070", - "tt4855748", - "tt0103873", - "tt1077368", - "tt0044207", - "tt0134067", - "tt0084787", - "tt0121164", - "tt1682180", - "tt4160840", - "tt1748113", - "tt2254790", - "tt8233874", - "tt2932536", - "tt3592750", - "tt1219834", - "tt2229095", - "tt3991302", - "tt2948356", - "tt5675632", - "tt1579396", - "tt0453729", - "tt0366777", - "tt3894660", - "tt2333998", - "tt1778940", - "tt3302654", - "tt3969208", - "tt0047930", - "tt0114825", - "tt2338027", - "tt2647078", - "tt0460883", - "tt3004572", - "tt1626201", - "tt4474828", - "tt0073801", - "tt0229260", - "tt3899706", - "tt2574666", - "tt5636234", - "tt1419346", - "tt5129156", - "tt3521148", - "tt3589016", - "tt5887630", - "tt3003980", - "tt1038971", - "tt1022571", - "tt1478877", - "tt5059406", - "tt4513074", - "tt0080908", - "tt3014556", - "tt5577742", - "tt3578894", - "tt1303233", - "tt3730162", - "tt0480249", - "tt3466248", - "tt6301784", - "tt0063522", - "tt3521164", - "tt0089175", - "tt2316433", - "tt0087262", - "tt3620452", - "tt1132626", - "tt4263482", - "tt1188729", - "tt5052448", - "tt1477076", - "tt0080749", - "tt2321549", - "tt0890870", - "tt0387564", - "tt0432348", - "tt8236214", - "tt1233227", - "tt5630752", - "tt5360232", - "tt0489270", - "tt10327842", - "tt11052346", - "tt3348730", - "tt0780521", - "tt4712086", - "tt0077773", - "tt0202936", - "tt0102488", - "tt0060440", - "tt0117161", - "tt2472102", - "tt0131013", - "tt1596769", - "tt1645116", - "tt0075944", - "tt2175581", - "tt3160336", - "tt0112342", - "tt0067296", - "tt0070187", - "tt1856053", - "tt0079148", - "tt2192580", - "tt0068281", - "tt0058113", - "tt5670836", - "tt0363587", - "tt0115487", - "tt10326928", - "tt0031867", - "tt0388141", - "tt3606752", - "tt0335185", - "tt0078294", - "tt2066922", - "tt1714205", - "tt2343707", - "tt5334108", - "tt0071115", - "tt5643768", - "tt0119365", - "tt0039357", - "tt1599351", - "tt5779686", - "tt9666394", - "tt0060880", - "tt0356150", - "tt0074285", - "tt1961307", - "tt9848404", - "tt2085741", - "tt3407562", - "tt0048387", - "tt7935392", - "tt0067367", - "tt0167456", - "tt4136008", - "tt0195714", - "tt8326250", - "tt0087799", - "tt1939659", - "tt1909270", - "tt6256978", - "tt5580252", - "tt0414982", - "tt1919184", - "tt0119081", - "tt0790781", - "tt0160127", - "tt0309593", - "tt1772422", - "tt1144884", - "tt0144084", - "tt6644200", - "tt1622979", - "tt0119731", - "tt2094760", - "tt5176648", - "tt3828090", - "tt3915560", - "tt3663890", - "tt0918531", - "tt8727992", - "tt1887746", - "tt5143270", - "tt6436666", - "tt0110099", - "tt0308506", - "tt1038693", - "tt5206170", - "tt1124048", - "tt4662062", - "tt1340418", - "tt2110388", - "tt0250720", - "tt1871420", - "tt2049554", - "tt0413893", - "tt6889806", - "tt0057212", - "tt3443808", - "tt1188474", - "tt0198371", - "tt3302498", - "tt6545220", - "tt0468795", - "tt0088449", - "tt0396445", - "tt4932388", - "tt0055502", - "tt0063822", - "tt0142892", - "tt0287539", - "tt10378798", - "tt0439226", - "tt5020372", - "tt1337671", - "tt0117276", - "tt5545862", - "tt0127349", - "tt8098480", - "tt1991191", - "tt0790804", - "tt0366174", - "tt9048318", - "tt6437228", - "tt3852042", - "tt0119942", - "tt0166792", - "tt0465142", - "tt5875632", - "tt5860852", - "tt5011604", - "tt8806104", - "tt2693610", - "tt4649856", - "tt0120716", - "tt1991180", - "tt0768212", - "tt3910148", - "tt0110066", - "tt2166500", - "tt0202641", - "tt0113089", - "tt1919174", - "tt0216930", - "tt1585660", - "tt1425933", - "tt0139615", - "tt2170499", - "tt7642542", - "tt0116130", - "tt0125454", - "tt1935742", - "tt5333842", - "tt0431021", - "tt0016039", - "tt4844148", - "tt1855325", - "tt2339741", - "tt5280664", - "tt0377109", - "tt0095963", - "tt1745784", - "tt0498381", - "tt1596365", - "tt1220634", - "tt1259521", - "tt0245674", - "tt0815245", - "tt0298130", - "tt0230600", - "tt0404032", - "tt0432021", - "tt0464141", - "tt0318627", - "tt0938330", - "tt2752772", - "tt0120804", - "tt4361050", - "tt2592614", - "tt0092076", - "tt2388715", - "tt4602066", - "tt2023587", - "tt1922777", - "tt1204977", - "tt0099994", - "tt0324216", - "tt0072271", - "tt1572315", - "tt0185937", - "tt2620590", - "tt0420294", - "tt0110978", - "tt0045888", - "tt11131032", - "tt0348836", - "tt2300975", - "tt1127180", - "tt0397065", - "tt7589524", - "tt0110148", - "tt0288477", - "tt0108026", - "tt3345528", - "tt0898098", - "tt3622110", - "tt0806203", - "tt3583186", - "tt6265828", - "tt0795351", - "tt0382628", - "tt4786282", - "tt1540011", - "tt11057912", - "tt4160708", - "tt0119152", - "tt0450385", - "tt8510350", - "tt8685520", - "tt1797498", - "tt2379713", - "tt8883524", - "tt3709718", - "tt5264178", - "tt0997093", - "tt0483826", - "tt1854564", - "tt0985056", - "tt0439115", - "tt4206516", - "tt2275543", - "tt1515179", - "tt3203462", - "tt0118073", - "tt2229301", - "tt0134618", - "tt1183672", - "tt1077252", - "tt4380580", - "tt1757816", - "tt0119848", - "tt4399590", - "tt1748260", - "tt6398054", - "tt10719984", - "tt6645236", - "tt0120906", - "tt2464508", - "tt2570224", - "tt0115907", - "tt1103984", - "tt2164770", - "tt10628006", - "tt0295254", - "tt2170369", - "tt0165336", - "tt3792884", - "tt2304870", - "tt3812722", - "tt0436331", - "tt0044486", - "tt0433405", - "tt3823672", - "tt0079894", - "tt5589212", - "tt7262346", - "tt6954136", - "tt0095889", - "tt10901588", - "tt8282042", - "tt0997184", - "tt0060461", - "tt7362036", - "tt1029360", - "tt0076009", - "tt0091778", - "tt0449086", - "tt0070047", - "tt0101744", - "tt0204313", - "tt0099528", - "tt0084516", - "tt0099720", - "tt2088974", - "tt0100776", - "tt0075922", - "tt0081421", - "tt0099818", - "tt0110832", - "tt1753773", - "tt0060944", - "tt0086199", - "tt0117876", - "tt11127054", - "tt0110530", - "tt0363589", - "tt0057311", - "tt4042994", - "tt0084133", - "tt2569772", - "tt1625350", - "tt1382722", - "tt3526098", - "tt1604115", - "tt0153225", - "tt1774400", - "tt6158692", - "tt1901033", - "tt2265567", - "tt1043877", - "tt2741452", - "tt4771568", - "tt0034272", - "tt1105512", - "tt0089274", - "tt2447908", - "tt1731755", - "tt0047885", - "tt0064353", - "tt1715827", - "tt2520516", - "tt0086137", - "tt0085211", - "tt0082377", - "tt0120135", - "tt0454841", - "tt0466909", - "tt0800069", - "tt0100258", - "tt0077681", - "tt1087431", - "tt7594384", - "tt0077394", - "tt10462646", - "tt1074638", - "tt0091680", - "tt0077402", - "tt4287350", - "tt0063350", - "tt0337592", - "tt0088993", - "tt0489018", - "tt0146675", - "tt0138510", - "tt0116365", - "tt1262416", - "tt0119215", - "tt0134084", - "tt0167404", - "tt1288558", - "tt0117571", - "tt0051588", - "tt0083907", - "tt0092991", - "tt0069938", - "tt0097388", - "tt0251736", - "tt7904606", - "tt0083972", - "tt0061847", - "tt0120082", - "tt5203824", - "tt0211443", - "tt0830515", - "tt0095179", - "tt0082418", - "tt0087298", - "tt0089173", - "tt0758746", - "tt0080761", - "tt0070351", - "tt0091080", - "tt0107254", - "tt10927576", - "tt0329101", - "tt3302078", - "tt4693358", - "tt0082411", - "tt0101917", - "tt0112819", - "tt0115906", - "tt2325014", - "tt0028661", - "tt0087800", - "tt0061407", - "tt0093629", - "tt0103003", - "tt0111686", - "tt0097981", - "tt0089686", - "tt0095742", - "tt1179056", - "tt0381061", - "tt3951732", - "tt0118912", - "tt3021360", - "tt0078517", - "tt0120764", - "tt0105327", - "tt2295712", - "tt3256226", - "tt0032130", - "tt1295085", - "tt0041694", - "tt0116731", - "tt0033766", - "tt0080431", - "tt2506388", - "tt6900644", - "tt5305246", - "tt1278469", - "tt0064782", - "tt0278413", - "tt1934335", - "tt5836576", - "tt1488164", - "tt5068162", - "tt5948944", - "tt0077118", - "tt8726442", - "tt7026230", - "tt10026172", - "tt6899800", - "tt8332666", - "tt6067832", - "tt5929750", - "tt1196339", - "tt6388082", - "tt7455754", - "tt0862856", - "tt2866708", - "tt0049103", - "tt1199557", - "tt0118665", - "tt1966385", - "tt0116240", - "tt0035616", - "tt0065528", - "tt0071973", - "tt0071771", - "tt3859052", - "tt3903416", - "tt0384537", - "tt1270781", - "tt0243931", - "tt0031295", - "tt4335520", - "tt3189862", - "tt0101698", - "tt9151704", - "tt5831936", - "tt0102789", - "tt0127722", - "tt0023464", - "tt2084093", - "tt0028141", - "tt0056062", - "tt1220217", - "tt2273004", - "tt0038622", - "tt0112571", - "tt0886531", - "tt5818782", - "tt1591095", - "tt0162661", - "tt3065204", - "tt7044076", - "tt3195644", - "tt1289401", - "tt0246578", - "tt0119695", - "tt5726086", - "tt1618442", - "tt0385880", - "tt0093560", - "tt0094721", - "tt1457767", - "tt3322940", - "tt5140878", - "tt0087332", - "tt0097428", - "tt2226417", - "tt0112642", - "tt1060253", - "tt6316816", - "tt1127682", - "tt8988748", - "tt1182942", - "tt0182983", - "tt2503990", - "tt3236962", - "tt5865966", - "tt4461390", - "tt7554632", - "tt5913798", - "tt6246534", - "tt10915286", - "tt5865326", - "tt7262990", - "tt1979376", - "tt5294518", - "tt8439204", - "tt0191074", - "tt1787767", - "tt1869416", - "tt4153828", - "tt8663446", - "tt2088871", - "tt1925446", - "tt0116752", - "tt0087020", - "tt4080598", - "tt6733446", - "tt2343475", - "tt0117338", - "tt2131541", - "tt0093139", - "tt0082367", - "tt2281065", - "tt0458242", - "tt1607577", - "tt2072145", - "tt0068776", - "tt5482752", - "tt7951038", - "tt2493466", - "tt2112143", - "tt0098532", - "tt1836210", - "tt1190708", - "tt0091151", - "tt0472230", - "tt3070506", - "tt0325033", - "tt0080996", - "tt9251718", - "tt2325909", - "tt0158692", - "tt9184066", - "tt2192900", - "tt0070078", - "tt1629377", - "tt2724304", - "tt0078437", - "tt2330933", - "tt0078078", - "tt0245562", - "tt1595354", - "tt0071229", - "tt2956666", - "tt0311519", - "tt0159485", - "tt0449073", - "tt3963812", - "tt0415345", - "tt3121122", - "tt5104330", - "tt8965432", - "tt0112681", - "tt1874757", - "tt1049406", - "tt0094675", - "tt0048527", - "tt2506632", - "tt5987374", - "tt3544734", - "tt7214964", - "tt0071762", - "tt7209510", - "tt0177215", - "tt0022905", - "tt0089114", - "tt2327397", - "tt0310933", - "tt4400688", - "tt0119256", - "tt0996979", - "tt0027407", - "tt2346046", - "tt5051150", - "tt5314638", - "tt0441889", - "tt5757520", - "tt1663631", - "tt0023349", - "tt2370686", - "tt7855072", - "tt0042376", - "tt5541140", - "tt6540084", - "tt6140294", - "tt0103247", - "tt5512756", - "tt0077651", - "tt0118892", - "tt5968156", - "tt0046806", - "tt0211181", - "tt1852154", - "tt6848094", - "tt5280018", - "tt0061610", - "tt0048975", - "tt0113253", - "tt0095271", - "tt0220506", - "tt1502407", - "tt1220715", - "tt0120694", - "tt0373883", - "tt0097474", - "tt1311067", - "tt0082495", - "tt6228640", - "tt0085636", - "tt0039312", - "tt4084954", - "tt0044509", - "tt1235548", - "tt1614950", - "tt5797828", - "tt1853533", - "tt1362141", - "tt4158876", - "tt7670212", - "tt1736046", - "tt2232404", - "tt0246592", - "tt2210855", - "tt5901672", - "tt3955230", - "tt1918727", - "tt0114469", - "tt0042677", - "tt7456544", - "tt2624662", - "tt1950192", - "tt4304382", - "tt4057956", - "tt1808339", - "tt0086873", - "tt0035959", - "tt3591836", - "tt7006938", - "tt8578738", - "tt4096810", - "tt0055361", - "tt0117119", - "tt3205630", - "tt0094137", - "tt3279870", - "tt3770272", - "tt2370528", - "tt7645780", - "tt0865907", - "tt0119360", - "tt4779072", - "tt6217306", - "tt0146838", - "tt0035608", - "tt0327437", - "tt0057093", - "tt0119778", - "tt2901582", - "tt2458412", - "tt8752498", - "tt4465572", - "tt10188156", - "tt0029604", - "tt0118147", - "tt0086379", - "tt10548944", - "tt9581518", - "tt3894094", - "tt5080804", - "tt8483272", - "tt0118570", - "tt8398892", - "tt10915930", - "tt9358192", - "tt2088957", - "tt10987544", - "tt1560779", - "tt7657364", - "tt0103016", - "tt0770751", - "tt6302006", - "tt10240438", - "tt2124190", - "tt7476524", - "tt0245120", - "tt2789014", - "tt0057435", - "tt5358014", - "tt9154936", - "tt0107079", - "tt0046331", - "tt0063256", - "tt6043142", - "tt4381382", - "tt0256103", - "tt0077360", - "tt7319822", - "tt10767720", - "tt0036692", - "tt0050500", - "tt8850036", - "tt1956618", - "tt5109302", - "tt0082894", - "tt0026338", - "tt7339248", - "tt7105440", - "tt0032467", - "tt1733729", - "tt3741316", - "tt2102499", - "tt3561818", - "tt0327665", - "tt2273024", - "tt2033981", - "tt0100449", - "tt0095362", - "tt1579956", - "tt2057499", - "tt8484370", - "tt10444096", - "tt4192552", - "tt0035746", - "tt0800325", - "tt5988012", - "tt0051816", - "tt3748354", - "tt6938602", - "tt0026942", - "tt3437996", - "tt1327196", - "tt5582306", - "tt0061433", - "tt0102592", - "tt8697266", - "tt1014807", - "tt1780862", - "tt0373024", - "tt0048603", - "tt2716062", - "tt4919766", - "tt0469111", - "tt0119892", - "tt0102598", - "tt3175350", - "tt0061385", - "tt3692768", - "tt5053156", - "tt0089393", - "tt0022626", - "tt0086250", - "tt0034449", - "tt6388074", - "tt5814530", - "tt10384806", - "tt0032145", - "tt4572116", - "tt0973790", - "tt6263828", - "tt0026421", - "tt0020081", - "tt2042712", - "tt0330602", - "tt1827415", - "tt5541240", - "tt5204636", - "tt2120025", - "tt5806798", - "tt10038028", - "tt6013186", - "tt0104009", - "tt5648966", - "tt0031477", - "tt4701702", - "tt2691040", - "tt4624724", - "tt10843676", - "tt4253360", - "tt1625345", - "tt1935139", - "tt0167190", - "tt0384488", - "tt0066413", - "tt3387560", - "tt1845796", - "tt5209072", - "tt2262157", - "tt0037966", - "tt0372311", - "tt1461395", - "tt2360430", - "tt0038780", - "tt0432373", - "tt0020642", - "tt0109297", - "tt3380800", - "tt2505294", - "tt3995504", - "tt7505148", - "tt0483578", - "tt3655414", - "tt0938341", - "tt1604900", - "tt1434423", - "tt4786802", - "tt5684550", - "tt0020641", - "tt1998393", - "tt0042488", - "tt3615204", - "tt4378066", - "tt0039111", - "tt2313306", - "tt4643670", - "tt0984057", - "tt0286261", - "tt1641398", - "tt0054016", - "tt2817548", - "tt5979556", - "tt5278806", - "tt1552192", - "tt5037296", - "tt0241760", - "tt0104181", - "tt0061380", - "tt0438204", - "tt0039337", - "tt0775529", - "tt2179191", - "tt0475936", - "tt2327507", - "tt0067458", - "tt0024314", - "tt3911850", - "tt3651512", - "tt3156000", - "tt0062706", - "tt0045682", - "tt3472928", - "tt5238824", - "tt3885442", - "tt0039783", - "tt0242888", - "tt2016901", - "tt10958282", - "tt1419318", - "tt3197176", - "tt4332232", - "tt2357770", - "tt0172627", - "tt0096280", - "tt5836262", - "tt0162360", - "tt7476416", - "tt2870306", - "tt0282698", - "tt0388419", - "tt0096223", - "tt5541848", - "tt6438096", - "tt1127228", - "tt0111653", - "tt0160216", - "tt0049902", - "tt2690572", - "tt1918911", - "tt8059382", - "tt0049007", - "tt2326087", - "tt2974726", - "tt0107819", - "tt1916766", - "tt3731792", - "tt0094824", - "tt4219652", - "tt0040919", - "tt0838164", - "tt1470859", - "tt0029010", - "tt0106639", - "tt0066542", - "tt0023196", - "tt2428170", - "tt3783746", - "tt0055811", - "tt2025586", - "tt0046085", - "tt0115710", - "tt0051849", - "tt2342421", - "tt0101757", - "tt10208198", - "tt4042818", - "tt1597070", - "tt4985564", - "tt0104756", - "tt0104187", - "tt7068896", - "tt9064764", - "tt0092268", - "tt5278596", - "tt4872998", - "tt0088286", - "tt2014346", - "tt7164714", - "tt0026205", - "tt4523928", - "tt0388500", - "tt2943946", - "tt0110442", - "tt0043465", - "tt4008566", - "tt8134742", - "tt10579992", - "tt1673376", - "tt5213870", - "tt2892340", - "tt8364368", - "tt7945420", - "tt0048401", - "tt3589172", - "tt7308310", - "tt4463894", - "tt0071212", - "tt0099002", - "tt0018524", - "tt3140958", - "tt0026983", - "tt0208502", - "tt0326769", - "tt3901260", - "tt1406161", - "tt0356176", - "tt6958760", - "tt7229730", - "tt2216748", - "tt0027367", - "tt0051844", - "tt6214928", - "tt0165831", - "tt0426615", - "tt3489996", - "tt2431074", - "tt0055524", - "tt0017584", - "tt0028683", - "tt7399140", - "tt4995858", - "tt0044431", - "tt1734550", - "tt6508408", - "tt0075887", - "tt3108154", - "tt0038104", - "tt2447318", - "tt0091295", - "tt2234315", - "tt7188058", - "tt1964887", - "tt2870350", - "tt9652888", - "tt3180912", - "tt0441782", - "tt1877688", - "tt0088107", - "tt4943998", - "tt0105682", - "tt0200120", - "tt0092260", - "tt0122800", - "tt6448406", - "tt7827658", - "tt0074792", - "tt0085218", - "tt3071192", - "tt2472668", - "tt7981480", - "tt7205942", - "tt7664228", - "tt0085635", - "tt0102545", - "tt5451244", - "tt1797547", - "tt9182284", - "tt0080040", - "tt5536398", - "tt6447952", - "tt7180392", - "tt0052169", - "tt7734218", - "tt0442286", - "tt1572769", - "tt4777004", - "tt5244762", - "tt4820284", - "tt0074419", - "tt0126301", - "tt0212830", - "tt3721070", - "tt0081648", - "tt0076767", - "tt0119223", - "tt0074836", - "tt0045316", - "tt6047298", - "tt2004262", - "tt8739752", - "tt4558830", - "tt9135944", - "tt6014434", - "tt8055324", - "tt8110640", - "tt5061570", - "tt4249710", - "tt0215516", - "tt4042834", - "tt0119783", - "tt0053902", - "tt8657548", - "tt1291547", - "tt0048752", - "tt10378980", - "tt7453418", - "tt0992993", - "tt5739478", - "tt0954541", - "tt5478698", - "tt0049778", - "tt0068245", - "tt0046931", - "tt6627134", - "tt0098471", - "tt0118798", - "tt0167423", - "tt0054652", - "tt8521500", - "tt0023194", - "tt0081283", - "tt2033965", - "tt1704161", - "tt0032612", - "tt5306084", - "tt0211941", - "tt3314958", - "tt8174450", - "tt1935828", - "tt4309834", - "tt7476856", - "tt6597488", - "tt10329696", - "tt9312100", - "tt6963760", - "tt7296606", - "tt10617150", - "tt07455754", - "tt8168966", - "tt3706960", - "tt1683524", - "tt7083208", - "tt0083951", - "tt3733138", - "tt3262534", - "tt7689532", - "tt2158695", - "tt6096414", - "tt7304196", - "tt1413527", - "tt0280760", - "tt1199503", - "tt0083694", - "tt0210075", - "tt0105187", - "tt4089412", - "tt0126917", - "tt0413879", - "tt2510820", - "tt0050560", - "tt0097781", - "tt7790040", - "tt7251048", - "tt0028772", - "tt0465436", - "tt7021088", - "tt0033383", - "tt4200326", - "tt5273284", - "tt7224520", - "tt0036098", - "tt0075845", - "tt4004608", - "tt0198021", - "tt10269016", - "tt2147822", - "tt0090966", - "tt6356228", - "tt0018773", - "tt0047944", - "tt0068658", - "tt3826242", - "tt0043299", - "tt3592340", - "tt0337711", - "tt0042767", - "tt0091129", - "tt5149490", - "tt0234354", - "tt0109067", - "tt8254080", - "tt0289213", - "tt8072488", - "tt0199000", - "tt0059512", - "tt4097116", - "tt7857076", - "tt6275372", - "tt0889671", - "tt4400784", - "tt0094924", - "tt0025878", - "tt0061089", - "tt2520394", - "tt0026667", - "tt5612564", - "tt8738176", - "tt11006464", - "tt0052191", - "tt3394592", - "tt0471561", - "tt0040095", - "tt0037343", - "tt0203230", - "tt9186684", - "tt0074740", - "tt2309260", - "tt0038165", - "tt0086186", - "tt0090945", - "tt1261954", - "tt0060414", - "tt0046269", - "tt0054809", - "tt1268989", - "tt0395972", - "tt9083124", - "tt2891174", - "tt0488380", - "tt5154678", - "tt3662308", - "tt3992752", - "tt3500822", - "tt3980372", - "tt4239548", - "tt5224012", - "tt1640642", - "tt2338356", - "tt1127884", - "tt3204632", - "tt0038264", - "tt5641542", - "tt0045328", - "tt2182057", - "tt10927122", - "tt3450112", - "tt4703660", - "tt3476724", - "tt3561204", - "tt3755706", - "tt0071164", - "tt0914819", - "tt1155508", - "tt6903636", - "tt0081404", - "tt6212934", - "tt2529132", - "tt5175636", - "tt6189676", - "tt1763236", - "tt8503162", - "tt10409666", - "tt2090669", - "tt0066256", - "tt8918746", - "tt0185456", - "tt8998220", - "tt3796388", - "tt5001436", - "tt7916276", - "tt5827496", - "tt4698584", - "tt5225488", - "tt0090095", - "tt0258960", - "tt4687464", - "tt0047203", - "tt0098708", - "tt5714322", - "tt3106868", - "tt6063090", - "tt6320538", - "tt5352846", - "tt9242798", - "tt5013688", - "tt1921149", - "tt0052194", - "tt0065611", - "tt7721542", - "tt0047050", - "tt0038250", - "tt3628334", - "tt4181052", - "tt5233410", - "tt0049815", - "tt2309788", - "tt1308138", - "tt3445306", - "tt0062425", - "tt0120678", - "tt0034485", - "tt0057090", - "tt4033926", - "tt4785662", - "tt1562392", - "tt1530923", - "tt3263306", - "tt1858725", - "tt2719448", - "tt0037366", - "tt0294806", - "tt0420757", - "tt4558042", - "tt0048767", - "tt9737136", - "tt6720618", - "tt0027214", - "tt9020130", - "tt5851904", - "tt1523406", - "tt9737182", - "tt6815320", - "tt2321405", - "tt0436216", - "tt0995739", - "tt9737102", - "tt1700810", - "tt2268732", - "tt0337960", - "tt8609368", - "tt0222713", - "tt2014338", - "tt0089679", - "tt8609374", - "tt3833520", - "tt0023753", - "tt6487050", - "tt0042513", - "tt0071384", - "tt0040869", - "tt1356763", - "tt1929276", - "tt5329376", - "tt0059927", - "tt0062673", - "tt4485246", - "tt4459890", - "tt0808506", - "tt6217368", - "tt0256739", - "tt7643622", - "tt3865850", - "tt9351980", - "tt0095326", - "tt4176776", - "tt10613572", - "tt3206616", - "tt6237512", - "tt0048119", - "tt0053740", - "tt0098600", - "tt0047580", - "tt0025710", - "tt0101272", - "tt2200376", - "tt3379456", - "tt0099364", - "tt7967672", - "tt0078199", - "tt1383251", - "tt0106220", - "tt0074687", - "tt0038574", - "tt0068562", - "tt10467292", - "tt0135706", - "tt6803390", - "tt8639316", - "tt0028669", - "tt3358654", - "tt4625320", - "tt2365416", - "tt2400359", - "tt0025094", - "tt0997264", - "tt0044040", - "tt5797798", - "tt0491044", - "tt1859573", - "tt2008633", - "tt0118113", - "tt0090856", - "tt0026685", - "tt1621819", - "tt0144640", - "tt1516586", - "tt2298304", - "tt2630300", - "tt4966020", - "tt3297586", - "tt0923752", - "tt2396671", - "tt4679136", - "tt0067321", - "tt4687108", - "tt2091398", - "tt2515472", - "tt0031067", - "tt2064713", - "tt8063826", - "tt1837683", - "tt0303353", - "tt6363646", - "tt4385944", - "tt2925664", - "tt2785390", - "tt9097270", - "tt0297181", - "tt6517902", - "tt7169514", - "tt9724076", - "tt8638524", - "tt1682940", - "tt1272051", - "tt1194624", - "tt6201302", - "tt8329290", - "tt0188503", - "tt0107472", - "tt0762114", - "tt2125666", - "tt1438461", - "tt1336619", - "tt7339938", - "tt4300480", - "tt0103994", - "tt1020938", - "tt0081182", - "tt0053374", - "tt1217243", - "tt0091260", - "tt0015768", - "tt6529772", - "tt3163844", - "tt0455857", - "tt2186715", - "tt0087164", - "tt2106403", - "tt1229381", - "tt0050201", - "tt4276206", - "tt0065603", - "tt0057985", - "tt0058007", - "tt0050957", - "tt0059403", - "tt8879946", - "tt0152037", - "tt0457430", - "tt0952682", - "tt0077936", - "tt0298845", - "tt0105063", - "tt0113672", - "tt2093995", - "tt2368182", - "tt3313324", - "tt0447166", - "tt4941032", - "tt6887540", - "tt3906002", - "tt0049619", - "tt0029047", - "tt6801218", - "tt0244970", - "tt0120478", - "tt2944424", - "tt0934706", - "tt0081505", - "tt2934218", - "tt0064240", - "tt8174646", - "tt6884380", - "tt7735930", - "tt2201772", - "tt3878978", - "tt2094883", - "tt7610858", - "tt1534351", - "tt3429774", - "tt1806954", - "tt6281148", - "tt6988208", - "tt8947352", - "tt7107018", - "tt0251654", - "tt1034032", - "tt0089126", - "tt5495294", - "tt0153888", - "tt0102564", - "tt0153815", - "tt0039169", - "tt2649370", - "tt2459160", - "tt6969980", - "tt5069564", - "tt5889372", - "tt0152202", - "tt8553606", - "tt3452710", - "tt6736198", - "tt9826668", - "tt0076649", - "tt0048665", - "tt0338188", - "tt3584496", - "tt9086910", - "tt8785034", - "tt7655142", - "tt0417658", - "tt3777102", - "tt7491968", - "tt2233406", - "tt0415380", - "tt0097530", - "tt4771056", - "tt2476436", - "tt0092671", - "tt0165773", - "tt1212456", - "tt2334593", - "tt0293176", - "tt1071909", - "tt1916719", - "tt2445812", - "tt0790721", - "tt2587366", - "tt2625790", - "tt10687642", - "tt0119951", - "tt0401420", - "tt1156398", - "tt1104684", - "tt0219952", - "tt0032221", - "tt0110365", - "tt0036891", - "tt2455402", - "tt0111739", - "tt7392060", - "tt3388060", - "tt1532958", - "tt0040823", - "tt0042742", - "tt0478970", - "tt0047086", - "tt7438912", - "tt6613952", - "tt3923116", - "tt9593792", - "tt8837018", - "tt0040679", - "tt3129484", - "tt7127700", - "tt0163745", - "tt3448214", - "tt4061760", - "tt0021040", - "tt4052768", - "tt5113868", - "tt8665806", - "tt6393026", - "tt6426028", - "tt0233600", - "tt1521877", - "tt10952752", - "tt1090665", - "tt6332628", - "tt3574822", - "tt1262863", - "tt8757960", - "tt6869362", - "tt6065538", - "tt0097116", - "tt7254768", - "tt0441796", - "tt10495912", - "tt6519762", - "tt8456696", - "tt9469842", - "tt3262168", - "tt10049848", - "tt2925642", - "tt7434324", - "tt8176462", - "tt7620218", - "tt6466058", - "tt1579236", - "tt6064520", - "tt8236848", - "tt0118002", - "tt0042669", - "tt3341448", - "tt8031130", - "tt6112524", - "tt6863222", - "tt3083932", - "tt0076213", - "tt2803424", - "tt0033314", - "tt1801026", - "tt0057940", - "tt2368412", - "tt0250798", - "tt0116823", - "tt0090830", - "tt2719024", - "tt3773386", - "tt0103924", - "tt7094352", - "tt0042893", - "tt1539489", - "tt5016028", - "tt2931920", - "tt9204408", - "tt0114759", - "tt0047985", - "tt2609776", - "tt4512444", - "tt5886420", - "tt7582508", - "tt5539054", - "tt1307442", - "tt5592796", - "tt0041571", - "tt8328716", - "tt2550300", - "tt0076804", - "tt0319901", - "tt5307018", - "tt10847330", - "tt4064912", - "tt0280477", - "tt0048250", - "tt0119734", - "tt0041700", - "tt2912120", - "tt0045557", - "tt0033094", - "tt0042783", - "tt0035441", - "tt0032477", - "tt0384533", - "tt1740002", - "tt0465676", - "tt9465588", - "tt6320628", - "tt6268222", - "tt1980942", - "tt4844348", - "tt2265080", - "tt1990218", - "tt0111835", - "tt0814077", - "tt0074270", - "tt0036872", - "tt3635300", - "tt0296845", - "tt2236358", - "tt0087129", - "tt0092559", - "tt0117781", - "tt2279786", - "tt0188453", - "tt3562966", - "tt2171902", - "tt0070248", - "tt0107131", - "tt8106570", - "tt4841610", - "tt3028418", - "tt3369248", - "tt0104743", - "tt6866006", - "tt2950052", - "tt4073952", - "tt0383694", - "tt2043893", - "tt6338476", - "tt0020827", - "tt0036629", - "tt0380736", - "tt0091877", - "tt4189442", - "tt0211915", - "tt0065134", - "tt0106968", - "tt0120448", - "tt0035209", - "tt0084628", - "tt0103905", - "tt0075177", - "tt0037017", - "tt0110631", - "tt2815072", - "tt0058888", - "tt0054310", - "tt0283509", - "tt0056119", - "tt0116334", - "tt0037824", - "tt0056172", - "tt0039822", - "tt0180748", - "tt0197569", - "tt0049259", - "tt0051790", - "tt0095993", - "tt1403047", - "tt0071315", - "tt0042327", - "tt0140888", - "tt0303325", - "tt2202607", - "tt6264182", - "tt1032846", - "tt1202511", - "tt0473514", - "tt0465670", - "tt5939924", - "tt6037626", - "tt9353586", - "tt0483726", - "tt6895284", - "tt0034778", - "tt2913916", - "tt1984244", - "tt8725958", - "tt0026121", - "tt0040082", - "tt3223480", - "tt4331400", - "tt0065486", - "tt0388838", - "tt2322441", - "tt8394314", - "tt2033239", - "tt1354572", - "tt1345904", - "tt0343663", - "tt0049474", - "tt2216704", - "tt6987652", - "tt4265962", - "tt0091991", - "tt4847454", - "tt0106748", - "tt0079688", - "tt0290747", - "tt1634070", - "tt0094716", - "tt1029432", - "tt6743942", - "tt3038414", - "tt0099615", - "tt2514128", - "tt2745684", - "tt0111667", - "tt0040577", - "tt0078790", - "tt0113612", - "tt0772157", - "tt6759380", - "tt0072403", - "tt0074174", - "tt0462359", - "tt0022353", - "tt3733286", - "tt3899516", - "tt2108629", - "tt0063748", - "tt5669410", - "tt0098221", - "tt0045943", - "tt0371835", - "tt4383196", - "tt6293032", - "tt0055019", - "tt3221910", - "tt2238660", - "tt0449471", - "tt3094236", - "tt0047603", - "tt0120107", - "tt1198199", - "tt0053644", - "tt0260495", - "tt0079376", - "tt0031143", - "tt6019394", - "tt10622136", - "tt1211837", - "tt0024381", - "tt1051213", - "tt4142394", - "tt0052722", - "tt0119832", - "tt4970632", - "tt0068313", - "tt0029942", - "tt0050166", - "tt0113755", - "tt3848036", - "tt5238904", - "tt5895028", - "tt1828163", - "tt0065206", - "tt0047349", - "tt0113936", - "tt0060728", - "tt6126196", - "tt0460793", - "tt2049633", - "tt5710514", - "tt0026174", - "tt0094155", - "tt1666823", - "tt1574600", - "tt4174526", - "tt0199013", - "tt3294206", - "tt3195826", - "tt0022268", - "tt4194392", - "tt0097790", - "tt6917210", - "tt0060980", - "tt0065225", - "tt2951834", - "tt0065775", - "tt2015381", - "tt6649108", - "tt6523440", - "tt8350360", - "tt1212449", - "tt4452210", - "tt0055993", - "tt0119870", - "tt7671414", - "tt5699928", - "tt5196516", - "tt7078658", - "tt6578572", - "tt10720210", - "tt2294629", - "tt10682000", - "tt6023242", - "tt8858420", - "tt5061564", - "tt0060816", - "tt6887624", - "tt0011565", - "tt0469045", - "tt0165473", - "tt0030035", - "tt6462506", - "tt6275296", - "tt0067698", - "tt0095878", - "tt0095853", - "tt0032610", - "tt0312932", - "tt0100605", - "tt0067770", - "tt2125500", - "tt0080931", - "tt3591946", - "tt0085871", - "tt3892618", - "tt0093056", - "tt0084651", - "tt0048640", - "tt0404802", - "tt0235751", - "tt0097982", - "tt9526152", - "tt0395584", - "tt6964076", - "tt0091051", - "tt6151222", - "tt5954556", - "tt5884784", - "tt0070509", - "tt1630311", - "tt4896224", - "tt0070640", - "tt6962906", - "tt5990342", - "tt0026266", - "tt3895884", - "tt3648510", - "tt1734548", - "tt0897249", - "tt2392385", - "tt0079655", - "tt2620204", - "tt0102609", - "tt2461226", - "tt0117332", - "tt1351133", - "tt6289128", - "tt1851922", - "tt2054817", - "tt5818768", - "tt2591720", - "tt0039437", - "tt3597108", - "tt3707284", - "tt0021152", - "tt4139598", - "tt0048705", - "tt3881494", - "tt1535102", - "tt3616986", - "tt1815836", - "tt0304283", - "tt0081353", - "tt1735233", - "tt7058080", - "tt0035019", - "tt5860940", - "tt0347484", - "tt4019346", - "tt9635902", - "tt1587310", - "tt0063465", - "tt0075164", - "tt0269856", - "tt3012214", - "tt0097521", - "tt0818226", - "tt2882426", - "tt8147680", - "tt1945052", - "tt0391877", - "tt2471626", - "tt0275719", - "tt7748076", - "tt0083793", - "tt0028216", - "tt1675761", - "tt0045815", - "tt0023488", - "tt2401037", - "tt3762944", - "tt7527564", - "tt0050837", - "tt2271327", - "tt1410229", - "tt0030149", - "tt0049333", - "tt1871279", - "tt0047264", - "tt0100631", - "tt4799426", - "tt0077663", - "tt0120596", - "tt7164422", - "tt0053675", - "tt10161398", - "tt2016335", - "tt0056096", - "tt5737938", - "tt2215211", - "tt0031212", - "tt0101550", - "tt6269810", - "tt1845273", - "tt0043728", - "tt1865368", - "tt0064382", - "tt0164108", - "tt5119260", - "tt0040553", - "tt0457655", - "tt7790894", - "tt0192080", - "tt7381444", - "tt6281936", - "tt0062898", - "tt4414858", - "tt1885171", - "tt6679794", - "tt0029751", - "tt5883570", - "tt1747960", - "tt0260492", - "tt0841119", - "tt3758162", - "tt10651668", - "tt6094746", - "tt8354582", - "tt0032701", - "tt0041859", - "tt6141334", - "tt4554186", - "tt7832848", - "tt0110939", - "tt10847194", - "tt6980962", - "tt7858616", - "tt4840922", - "tt7987702", - "tt6317236", - "tt7661028", - "tt5903358", - "tt6251390", - "tt6557938", - "tt8329618", - "tt3624210", - "tt4974396", - "tt8418126", - "tt3895908", - "tt0329030", - "tt1286821", - "tt0096754", - "tt0109287", - "tt0085919", - "tt0892899", - "tt0044573", - "tt0418753", - "tt0448179", - "tt0021730", - "tt0046906", - "tt0159421", - "tt0057897", - "tt0040513", - "tt2283740", - "tt3659162", - "tt1016164", - "tt0037313", - "tt0255798", - "tt0084597", - "tt0021508", - "tt0048973", - "tt1238293", - "tt2380123", - "tt0042700", - "tt0112444", - "tt7331424", - "tt0996966", - "tt6358156", - "tt5535726", - "tt5358146", - "tt0035982", - "tt5342950", - "tt0107659", - "tt0078212", - "tt0075152", - "tt0168972", - "tt0309530", - "tt0103157", - "tt0115016", - "tt7520286", - "tt5693562", - "tt3328924", - "tt0330904", - "tt0261833", - "tt10255320", - "tt3110272", - "tt0073518", - "tt1491616", - "tt0172711", - "tt0099757", - "tt0060272", - "tt0061868", - "tt0080469", - "tt2296909", - "tt4809166", - "tt7313350", - "tt7964004", - "tt1801061", - "tt9352426", - "tt0451187", - "tt2630134", - "tt4100252", - "tt8539280", - "tt2184233", - "tt1841792", - "tt1977881", - "tt3764966", - "tt0119594", - "tt2325989", - "tt0041259", - "tt0076426", - "tt0118901", - "tt5729870", - "tt2547650", - "tt1230376", - "tt7046974", - "tt4540384", - "tt2137170", - "tt0015014", - "tt4843344", - "tt3100750", - "tt0104073", - "tt1284973", - "tt6138688", - "tt2245049", - "tt4268722", - "tt4466490", - "tt4704422", - "tt0044014", - "tt0062038", - "tt0054483", - "tt6368132", - "tt6405384", - "tt5425946", - "tt3397430", - "tt2043879", - "tt3917118", - "tt5119268", - "tt1830538", - "tt5480782", - "tt1613092", - "tt1815790", - "tt3257072", - "tt2946084", - "tt0042339", - "tt0183766", - "tt0071247", - "tt3482362", - "tt0071269", - "tt4881430", - "tt6648926", - "tt0430919", - "tt2306511", - "tt4625334", - "tt0036515", - "tt1724597", - "tt8695220", - "tt0107478", - "tt1016315", - "tt3569014", - "tt0093637", - "tt2709766", - "tt3660856", - "tt8633120", - "tt1748062", - "tt0376215", - "tt0082619", - "tt6119504", - "tt0043983", - "tt5716650", - "tt4842646", - "tt2473476", - "tt0051003", - "tt2338251", - "tt2427224", - "tt0150176", - "tt0071532", - "tt0039461", - "tt0082763", - "tt3719452", - "tt0088680", - "tt0026071", - "tt1609113", - "tt8749922", - "tt5754892", - "tt7553766", - "tt6071068", - "tt1440110", - "tt1488606", - "tt0409860", - "tt0416857", - "tt6271806", - "tt1809315", - "tt0037494", - "tt2112868", - "tt0084893", - "tt0118826", - "tt0035751", - "tt0079510", - "tt0347200", - "tt4762758", - "tt0070155", - "tt4269256", - "tt4240878", - "tt0280491", - "tt0098994", - "tt3496286", - "tt0357580", - "tt0053242", - "tt0403508", - "tt0094072", - "tt1884414", - "tt0113538", - "tt1786714", - "tt0243558", - "tt6181974", - "tt0407851", - "tt1831617", - "tt7616974", - "tt0177650", - "tt7321190", - "tt6061610", - "tt0035417", - "tt2261735", - "tt1609962", - "tt0305772", - "tt2112331", - "tt3138024", - "tt2626338", - "tt8351452", - "tt0808435", - "tt4693860", - "tt8549088", - "tt0111512", - "tt0066498", - "tt8204772", - "tt2295318", - "tt6365796", - "tt10954364", - "tt0092563", - "tt5668208", - "tt0067500", - "tt7596220", - "tt0054973", - "tt3511960", - "tt1778338", - "tt4456982", - "tt0425598", - "tt3133722", - "tt2734974", - "tt2004271", - "tt5603620", - "tt2333598", - "tt3924144", - "tt1863203", - "tt3101132", - "tt9358206", - "tt3072182", - "tt2297063", - "tt2821832", - "tt2017711", - "tt3529110", - "tt3699674", - "tt3130776", - "tt1674047", - "tt2186663", - "tt2201548", - "tt2287030", - "tt1922748", - "tt1971397", - "tt3812348", - "tt0285682", - "tt3359872", - "tt1292569", - "tt3503068", - "tt2915134", - "tt8620646", - "tt0486761", - "tt10675136", - "tt5240748", - "tt5503594", - "tt5890998", - "tt5016946", - "tt1799516", - "tt2880448", - "tt3686630", - "tt4846318", - "tt5641138", - "tt5192124", - "tt3646322", - "tt7279188", - "tt0191132", - "tt10791618", - "tt5857874", - "tt5047424", - "tt6209400", - "tt2044856", - "tt4151400", - "tt5087462", - "tt4820702", - "tt3462896", - "tt4152212", - "tt3825450", - "tt3741700", - "tt6565702", - "tt0068295", - "tt7584702", - "tt1016307", - "tt0138393", - "tt0064048", - "tt0082252", - "tt0049804", - "tt0094980", - "tt8351882", - "tt0085859", - "tt0096153", - "tt0068272", - "tt0204745", - "tt0040537", - "tt0013140", - "tt2376442", - "tt0365830", - "tt8663516", - "tt3843532", - "tt6423140", - "tt0393635", - "tt0099316", - "tt0039501", - "tt1853805", - "tt6400614", - "tt4934152", - "tt0060098", - "tt3550078", - "tt1728981", - "tt4637878", - "tt8064262", - "tt5640450", - "tt0101591", - "tt4878526", - "tt0213790", - "tt2437004", - "tt3576048", - "tt2544074", - "tt10847138", - "tt2983602", - "tt4517738", - "tt1079444", - "tt7127976", - "tt2315144", - "tt5160154", - "tt0088103", - "tt5223514", - "tt1198054", - "tt6628234", - "tt6097228", - "tt8337080", - "tt0035195", - "tt10924716", - "tt0069986", - "tt4163224", - "tt1528813", - "tt3340434", - "tt0452685", - "tt0109542", - "tt0095107", - "tt7655590", - "tt0035369", - "tt7925066", - "tt5952138", - "tt0080904", - "tt0035244", - "tt1650058", - "tt0087287", - "tt7350614", - "tt6460046", - "tt0107745", - "tt0057933", - "tt0058382", - "tt6494358", - "tt4983314", - "tt6333090", - "tt4494090", - "tt0431213", - "tt0053717", - "tt0056825", - "tt0055205", - "tt3791268", - "tt3228754", - "tt1680102", - "tt0158583", - "tt0489212", - "tt3891970", - "tt0025423", - "tt1666335", - "tt1112097", - "tt3201722", - "tt0918511", - "tt2704578", - "tt4555594", - "tt5773882", - "tt1019454", - "tt6794380", - "tt0119699", - "tt0100053", - "tt8748236", - "tt10812748", - "tt1761007", - "tt0187512", - "tt1640714", - "tt4807950", - "tt7521370", - "tt2838678", - "tt5449296", - "tt10136840", - "tt0186506", - "tt2442662", - "tt0060175", - "tt4916700", - "tt9006968", - "tt7975674", - "tt4329098", - "tt6321270", - "tt8069048", - "tt3464018", - "tt5456120", - "tt0050653", - "tt0051456", - "tt0052713", - "tt0051081", - "tt0049748", - "tt0070926", - "tt0054058", - "tt0054446", - "tt0051866", - "tt7613996", - "tt7033192", - "tt0050405", - "tt0066549", - "tt4106264", - "tt7144200", - "tt0074811", - "tt0057192", - "tt0050087", - "tt4642192", - "tt7533756", - "tt7456310", - "tt0132381", - "tt0132378", - "tt0132377", - "tt5240372", - "tt0132379", - "tt0132385", - "tt0079661", - "tt5079674", - "tt0087700", - "tt0282179", - "tt0203835", - "tt0222355", - "tt6139732", - "tt0455583", - "tt6868606", - "tt0091278", - "tt0116353", - "tt3729914", - "tt1754750", - "tt0203425", - "tt0120747", - "tt2047885", - "tt7583968", - "tt0132376", - "tt0109783", - "tt4945528", - "tt0078915", - "tt1426320", - "tt0029870", - "tt5987526", - "tt6107570", - "tt2005156", - "tt0930072", - "tt2752736", - "tt2415372", - "tt4828330", - "tt2444092", - "tt6491170", - "tt8111130", - "tt7511368", - "tt2131532", - "tt8084572", - "tt10520800", - "tt0090655", - "tt7403614", - "tt3920060", - "tt6044910", - "tt0195960", - "tt1045889", - "tt0085895", - "tt0138074", - "tt0374639", - "tt0052303", - "tt5636922", - "tt5243900", - "tt6848602", - "tt0473107", - "tt0114113", - "tt4264834", - "tt0138541", - "tt0083193", - "tt3604950", - "tt6450330", - "tt0247527", - "tt7913994", - "tt2638140", - "tt5967066", - "tt8597908", - "tt1382370", - "tt2245884", - "tt5915572", - "tt0083021", - "tt5313906", - "tt1536440", - "tt2043900", - "tt6011454", - "tt3263946", - "tt3078242", - "tt7627782", - "tt0132384", - "tt0132383", - "tt0060277", - "tt0942896", - "tt8228884", - "tt2998364", - "tt0021331", - "tt2080418", - "tt5918090", - "tt8124666", - "tt4223204", - "tt4481066", - "tt0082329", - "tt0087710", - "tt0132380", - "tt0129273", - "tt9176638", - "tt0132382", - "tt0072067", - "tt0063599", - "tt3264194", - "tt0180683", - "tt0072848", - "tt7942742", - "tt4184494", - "tt6333082", - "tt3953274", - "tt3381600", - "tt3314978", - "tt1169829", - "tt1127877", - "tt9203030", - "tt0128137", - "tt0057393", - "tt2461684", - "tt5935072", - "tt1577040", - "tt2023659", - "tt0043646", - "tt0032342", - "tt2419354", - "tt0092948", - "tt0034428", - "tt3097084", - "tt4650516", - "tt3997238", - "tt1091744", - "tt0146984", - "tt0337631", - "tt2458786", - "tt0102571", - "tt4519914", - "tt5509634", - "tt0081176", - "tt2827908", - "tt2179007", - "tt1496460", - "tt2236160", - "tt5581284", - "tt8552406", - "tt5208252", - "tt6947808", - "tt1686027", - "tt5473124", - "tt1433099", - "tt0486651", - "tt7797926", - "tt9352926", - "tt5508108", - "tt0088213", - "tt5651050", - "tt5893906", - "tt0119988", - "tt5141862", - "tt2258685", - "tt5258306", - "tt3678980", - "tt5850176", - "tt7531138", - "tt4420110", - "tt9837502", - "tt0095599", - "tt4597622", - "tt0097964", - "tt0425661", - "tt2996076", - "tt0145048", - "tt0105819", - "tt4761870", - "tt0104291", - "tt0101455", - "tt0043286", - "tt0235737", - "tt4136056", - "tt0025456", - "tt2281215", - "tt0042195", - "tt0096310", - "tt4697742", - "tt2481238", - "tt0334416", - "tt2258233", - "tt0041625", - "tt0051105", - "tt2678448", - "tt4819986", - "tt0026056", - "tt9283302", - "tt4113114", - "tt1698651", - "tt4038052", - "tt0064921", - "tt6280182", - "tt0119305", - "tt0062235", - "tt4382552", - "tt7215262", - "tt0085249", - "tt2308822", - "tt6049106", - "tt2254131", - "tt2709716", - "tt4301440", - "tt7034316", - "tt6571274", - "tt5836706", - "tt0084861", - "tt4632888", - "tt1591584", - "tt0094025", - "tt3548442", - "tt0023181", - "tt6385768", - "tt5787384", - "tt0093840", - "tt6945932", - "tt1745862", - "tt10354036", - "tt0040379", - "tt6773126", - "tt0024481", - "tt2430084", - "tt0080801", - "tt0097728", - "tt2353092", - "tt9042456", - "tt0051141", - "tt2114058", - "tt2322672", - "tt2083294", - "tt0490822", - "tt0044683", - "tt0029120", - "tt4129180", - "tt0042447", - "tt0271367", - "tt4262174", - "tt4172146", - "tt8271188", - "tt0060171", - "tt0097770", - "tt0097443", - "tt5583554", - "tt1648044", - "tt5036924", - "tt8884430", - "tt3584354", - "tt7323546", - "tt1189897", - "tt1895534", - "tt0080012", - "tt0021128", - "tt9419834", - "tt10847306", - "tt0073596", - "tt6734054", - "tt0021165", - "tt0366621", - "tt0216048", - "tt3320550", - "tt8969332", - "tt0120053", - "tt2042583", - "tt0120684", - "tt1731985", - "tt2601044", - "tt7524414", - "tt0061658", - "tt0100491", - "tt2433118", - "tt3918748", - "tt7130110", - "tt7954000", - "tt9165664", - "tt3737840", - "tt8343294", - "tt6590856", - "tt5718764", - "tt1641410", - "tt0048034", - "tt0103639", - "tt10720196", - "tt6570372", - "tt4324916", - "tt2475154", - "tt1852786", - "tt6533240", - "tt0216200", - "tt3032096", - "tt2296697", - "tt3829874", - "tt0114319", - "tt6931984", - "tt0107985", - "tt4120298", - "tt8710040", - "tt0056173", - "tt5057140", - "tt2925730", - "tt5707274", - "tt8202020", - "tt0141369", - "tt8617844", - "tt0053901", - "tt0032209", - "tt0460925", - "tt0301454", - "tt3883234", - "tt0163983", - "tt7473890", - "tt4902216", - "tt1153698", - "tt2452352", - "tt6984456", - "tt0428441", - "tt0094946", - "tt1326869", - "tt0082200", - "tt2520808", - "tt1851900", - "tt6212136", - "tt3654506", - "tt4645636", - "tt5000724", - "tt0022403", - "tt0113114", - "tt6047906", - "tt0380268", - "tt1659261", - "tt5808796", - "tt6151244", - "tt0050861", - "tt0048801", - "tt6547044", - "tt0117918", - "tt1979388", - "tt0064637", - "tt2292148", - "tt4786236", - "tt2512582", - "tt0049096", - "tt7310906", - "tt1753767", - "tt0027686", - "tt0091587", - "tt1079956", - "tt3512956", - "tt0028944", - "tt7156436", - "tt8793990", - "tt0179389", - "tt0448022", - "tt0106539", - "tt0092718", - "tt1954886", - "tt0854678", - "tt4653606", - "tt0248640", - "tt6705860", - "tt8318648", - "tt6677418", - "tt4461676", - "tt0869152", - "tt7398584", - "tt0382932", - "tt3445280", - "tt10510166", - "tt5997492", - "tt4944460", - "tt7978660", - "tt0059415", - "tt7538788", - "tt9174828", - "tt4086024", - "tt5882206", - "tt4569878", - "tt0078788", - "tt1216475", - "tt8200998", - "tt7137640", - "tt5859352", - "tt0112641", - "tt7043534", - "tt5030904", - "tt1525836", - "tt1217209", - "tt10095336", - "tt6798722", - "tt2096673", - "tt3581384", - "tt6106822", - "tt3904360", - "tt0049087", - "tt2403931", - "tt0131149", - "tt2896898", - "tt0071696", - "tt0489007", - "tt3430482", - "tt0030764", - "tt0048724", - "tt0042198", - "tt1326220", - "tt5966990", - "tt0057889", - "tt3312100", - "tt0159784", - "tt2137351", - "tt0065494", - "tt0377091", - "tt0119807", - "tt5034266", - "tt5203320", - "tt2027178", - "tt0083657", - "tt0117092", - "tt3297554", - "tt4542660", - "tt0097257", - "tt0030044", - "tt3138122", - "tt0045566", - "tt5174284", - "tt4683668", - "tt0040446", - "tt5156530", - "tt6048930", - "tt0375173", - "tt5723286", - "tt5267472", - "tt1228953", - "tt3986532", - "tt2396589", - "tt3319212", - "tt5269374", - "tt5352432", - "tt7354868", - "tt7157574", - "tt7133686", - "tt7785392", - "tt6081408", - "tt6343706", - "tt5377658", - "tt7929156", - "tt1277936", - "tt0031385", - "tt3216766", - "tt7983844", - "tt0101545", - "tt6333060", - "tt0477139", - "tt9261574", - "tt0151905", - "tt9541602", - "tt0022153", - "tt0105059", - "tt4187452", - "tt4139588", - "tt2106651", - "tt6567544", - "tt1754853", - "tt0415965", - "tt0055471", - "tt3339354", - "tt0283026", - "tt0097758", - "tt2737304", - "tt0362269", - "tt0144214", - "tt0263238", - "tt4660086", - "tt0054292", - "tt0208074", - "tt6004848", - "tt5893100", - "tt6333096", - "tt0106701", - "tt0120710", - "tt0052809", - "tt0029217", - "tt1034072", - "tt0051221", - "tt7123974", - "tt0043117", - "tt0050680", - "tt1828976", - "tt0048312", - "tt5022702", - "tt7043012", - "tt5492496", - "tt0116311", - "tt3801730", - "tt0083854", - "tt0030287", - "tt0080157", - "tt3440298", - "tt0074179", - "tt0112435", - "tt0037522", - "tt4135896", - "tt5124104", - "tt0037094", - "tt0266543", - "tt4065316", - "tt10309088", - "tt0944101", - "tt0112368", - "tt4338184", - "tt0069131", - "tt2011972", - "tt2318701", - "tt3219678", - "tt4936064", - "tt2081178", - "tt1389098", - "tt0323939", - "tt7521860", - "tt1471346", - "tt1576378", - "tt3576352", - "tt5280980", - "tt1122614", - "tt0045175", - "tt0094747", - "tt0103125", - "tt9082020", - "tt0073470", - "tt2277860", - "tt0054205", - "tt0066448", - "tt0479500", - "tt0119125", - "tt0412366", - "tt0337917", - "tt3815136", - "tt3488184", - "tt0316768", - "tt0119715", - "tt0016220", - "tt1386691", - "tt6446550", - "tt1326264", - "tt7274546", - "tt8783798", - "tt6690860", - "tt0075629", - "tt5981656", - "tt8080302", - "tt1814842", - "tt6143782", - "tt10521814", - "tt2435970", - "tt4006384", - "tt2865618", - "tt9053472", - "tt2871776", - "tt8655738", - "tt4935462", - "tt0054033", - "tt2960470", - "tt0499516", - "tt3102440", - "tt0062144", - "tt2581664", - "tt2071582", - "tt6147514", - "tt0093668", - "tt3091304", - "tt0053457", - "tt4271918", - "tt0052278", - "tt1648035", - "tt2195498", - "tt3186984", - "tt3359754", - "tt0038765", - "tt0089904", - "tt0290210", - "tt5028698", - "tt1227378", - "tt0048719", - "tt0216584", - "tt3772640", - "tt6205994", - "tt3322134", - "tt10902020", - "tt0024069", - "tt0045992", - "tt0101912", - "tt3164198", - "tt0077698", - "tt3701804", - "tt1440756", - "tt3499084", - "tt6710212", - "tt2654522", - "tt0057007", - "tt3332308", - "tt5033790", - "tt1245098", - "tt1465471", - "tt3781476", - "tt8381988", - "tt3689590", - "tt8426594", - "tt3816372", - "tt0433362", - "tt6679242", - "tt5742304", - "tt10907772", - "tt0040495", - "tt2507128", - "tt4310022", - "tt4729426", - "tt0092676", - "tt7715192", - "tt1736049", - "tt3858454", - "tt6146586", - "tt0102558", - "tt0338427", - "tt1579247", - "tt5215486", - "tt1322313", - "tt2977110", - "tt0081738", - "tt0133985", - "tt4026034", - "tt6022898", - "tt1674785", - "tt9063470", - "tt6892378", - "tt0036172", - "tt4201522", - "tt0091934", - "tt4882698", - "tt6432062", - "tt5215088", - "tt8425264", - "tt0058580", - "tt0109190", - "tt5519340", - "tt0221309", - "tt2505938", - "tt0036630", - "tt1823059", - "tt0073133", - "tt0081746", - "tt6052748", - "tt1622563", - "tt1020876", - "tt0174792", - "tt0033105", - "tt0285175", - "tt0043924", - "tt4338138", - "tt1699509", - "tt7697712", - "tt0108515", - "tt9831136", - "tt4353250", - "tt0119670", - "tt0036881", - "tt0177262", - "tt0492494", - "tt6051096", - "tt5755912", - "tt0092074", - "tt0023153", - "tt5936578", - "tt6643608", - "tt0059460", - "tt0032273", - "tt0116589", - "tt1748043", - "tt0087096", - "tt1196165", - "tt5164412", - "tt2041510", - "tt2911666", - "tt0059309", - "tt0406650", - "tt2402200", - "tt0109959", - "tt8861802", - "tt4425200", - "tt0069824", - "tt5773116", - "tt8695030", - "tt0478049", - "tt1920885", - "tt0102958", - "tt0107438", - "tt6874254", - "tt1954299", - "tt0053361", - "tt3660770", - "tt2103159", - "tt1931388", - "tt1945228", - "tt0120238", - "tt0253867", - "tt4629266", - "tt0107937", - "tt8284860", - "tt0050126", - "tt2498626", - "tt1753549", - "tt0033717", - "tt0080948", - "tt0119219", - "tt0093405", - "tt0060560", - "tt4647900", - "tt4819510", - "tt0087968", - "tt0120034", - "tt0138467", - "tt0265010", - "tt4524992", - "tt5690958", - "tt6047388", - "tt9219868", - "tt2177180", - "tt0083449", - "tt0196499", - "tt0462499", - "tt0056632", - "tt6856056", - "tt8585940", - "tt0492492", - "tt1990352", - "tt1513089", - "tt2064960", - "tt1112115", - "tt0037404", - "tt6619250", - "tt0045294", - "tt0139491", - "tt0069349", - "tt1667485", - "tt0082591", - "tt0208850", - "tt2355540", - "tt0064287", - "tt4776324", - "tt0163759", - "tt6739646", - "tt0209274", - "tt2304747", - "tt10810030", - "tt0389326", - "tt1368117", - "tt0077598", - "tt0206190", - "tt0087660", - "tt0285094", - "tt4157220", - "tt6522668", - "tt4219836", - "tt0360033", - "tt2294551", - "tt1974308", - "tt1462014", - "tt5730248", - "tt5510970", - "tt0363282", - "tt1697920", - "tt0209191", - "tt5563100", - "tt1592784", - "tt0099044", - "tt0116016", - "tt5066870", - "tt0372334", - "tt0091790", - "tt0309061", - "tt5076184", - "tt8226078", - "tt3243636", - "tt0082534", - "tt1695831", - "tt2223678", - "tt4524432", - "tt4772396", - "tt2040281", - "tt4729466", - "tt4105466", - "tt0406280", - "tt0393435", - "tt0040019", - "tt0064815", - "tt3824032", - "tt7692966", - "tt0028165", - "tt0461847", - "tt3823018", - "tt0102497", - "tt3640682", - "tt0048575", - "tt0066919", - "tt0028275", - "tt5076032", - "tt1515203", - "tt6169920", - "tt0903618", - "tt0082081", - "tt0209110", - "tt0022080", - "tt0062322", - "tt0434953", - "tt8296608", - "tt0061524", - "tt0056053", - "tt0176684", - "tt4373956", - "tt8559006", - "tt0026394", - "tt0923709", - "tt4144368", - "tt0070809", - "tt0132683", - "tt7205208", - "tt0311599", - "tt0025592", - "tt5788528", - "tt7037544", - "tt5566660", - "tt4711926", - "tt3654964", - "tt1486616", - "tt8499102", - "tt0351540", - "tt4411466", - "tt2136914", - "tt3471440", - "tt0289390", - "tt3741860", - "tt3141954", - "tt1741225", - "tt0265591", - "tt3794392", - "tt2559192", - "tt0972883", - "tt6329716", - "tt3246874", - "tt3699104", - "tt0137799", - "tt0113762", - "tt8483220", - "tt1579361", - "tt9358228", - "tt6077540", - "tt5646136", - "tt7639528", - "tt6423428", - "tt8515700", - "tt7472330", - "tt6998390", - "tt0847817", - "tt1083462", - "tt3813334", - "tt2609912", - "tt3486626", - "tt5097970", - "tt0116095", - "tt0045808", - "tt1860242", - "tt2545428", - "tt0110186", - "tt1312251", - "tt0023876", - "tt0019702", - "tt0494652", - "tt7866702", - "tt0310910", - "tt0038601", - "tt0026008", - "tt0960790", - "tt1032821", - "tt1742081", - "tt5834576", - "tt5776928", - "tt9730648", - "tt0046903", - "tt5692030", - "tt9730640", - "tt9730644", - "tt7999850", - "tt0088178", - "tt0326208", - "tt0180734", - "tt0037150", - "tt0393597", - "tt1091617", - "tt8922118", - "tt3253624", - "tt7203052", - "tt0100740", - "tt5875654", - "tt0086397", - "tt0093660", - "tt0043565", - "tt4188766", - "tt0047123", - "tt0314097", - "tt0116410", - "tt0081964", - "tt0038461", - "tt0110057", - "tt3201640", - "tt1155592", - "tt1283952", - "tt0258038", - "tt9088954", - "tt4861558", - "tt4624852", - "tt2281095", - "tt5783630", - "tt1972663", - "tt5804038", - "tt5638642", - "tt1687247", - "tt6165936", - "tt0083959", - "tt0039416", - "tt0260191", - "tt1241317", - "tt5327410", - "tt0120913", - "tt0171363", - "tt0974959", - "tt0163988", - "tt0005077", - "tt0157191", - "tt0103241", - "tt0808146", - "tt0185014", - "tt0258153", - "tt1371585", - "tt4483100", - "tt3177392", - "tt2459022", - "tt0185431", - "tt6809094", - "tt0940709", - "tt0119137", - "tt0071567", - "tt0130585", - "tt0163978", - "tt3748172", - "tt0284837", - "tt0290095", - "tt0120885", - "tt0120828", - "tt2295034", - "tt0384680", - "tt0398165", - "tt0159568", - "tt0110377", - "tt0172493", - "tt0032762", - "tt0427944", - "tt0454945", - "tt0335245", - "tt3967856", - "tt0067503", - "tt0130908", - "tt0115433", - "tt0061181", - "tt0061023", - "tt0126642", - "tt0092005", - "tt0456554", - "tt7557212", - "tt3188290", - "tt0390384", - "tt2186791", - "tt4110086", - "tt0104534", - "tt0213065", - "tt0060594", - "tt0060143", - "tt0109322", - "tt0065677", - "tt0064647", - "tt0075834", - "tt0060550", - "tt0052667", - "tt1810633", - "tt0208654", - "tt0073869", - "tt0067134", - "tt8433858", - "tt0082570", - "tt0065794", - "tt2644072", - "tt0065812", - "tt0131042", - "tt3692082", - "tt0094274", - "tt0403237", - "tt1024855", - "tt1094249", - "tt0185266", - "tt7932490", - "tt4229298", - "tt0167261", - "tt3822614", - "tt4738912", - "tt2187107", - "tt0167260", - "tt0458364", - "tt0120737", - "tt8708304", - "tt0054020", - "tt8400758", - "tt1986998", - "tt5066616", - "tt2015462", - "tt6400316", - "tt2197240", - "tt0102888", - "tt2726560", - "tt4653818", - "tt7905880", - "tt7363336", - "tt6471090", - "tt0101523", - "tt0119358", - "tt6496816", - "tt2992220", - "tt2576452", - "tt7474914", - "tt2536512", - "tt7036840", - "tt3153806", - "tt7665846", - "tt3767278", - "tt9024106", - "tt5174974", - "tt0028970", - "tt0066017", - "tt5265980", - "tt1489887", - "tt6920356", - "tt7150512", - "tt8300786", - "tt7264462", - "tt0058962", - "tt5774054", - "tt0468536", - "tt6830716", - "tt0295192", - "tt7349910", - "tt0117110", - "tt1798188", - "tt0117002", - "tt1234541", - "tt0062994", - "tt0077588", - "tt0084805", - "tt0046057", - "tt0045616", - "tt0099401", - "tt0048691", - "tt0049038", - "tt0049408", - "tt0379217", - "tt0051622", - "tt1821549", - "tt0055630", - "tt1692486", - "tt0055608", - "tt0062136", - "tt0067372", - "tt0062755", - "tt0069113", - "tt0089092", - "tt0106620", - "tt0443473", - "tt0078754", - "tt0056443", - "tt1014759", - "tt0236784", - "tt2820852", - "tt0091083", - "tt1182350", - "tt5770864", - "tt9860728", - "tt0200138", - "tt0120630", - "tt0098524", - "tt1193631", - "tt9213932", - "tt2103281", - "tt0366551", - "tt1646971", - "tt0047472", - "tt7464188", - "tt0091059", - "tt0021635", - "tt1629757", - "tt0096344", - "tt0428870", - "tt0481369", - "tt0847167", - "tt0105236", - "tt1657284", - "tt0291848", - "tt0852975", - "tt0091225", - "tt2654430", - "tt1549571", - "tt6564620", - "tt4781700", - "tt1078885", - "tt0010323", - "tt3438640", - "tt0240122", - "tt2088714", - "tt5779286", - "tt0099290", - "tt4701546", - "tt0082335", - "tt1506458", - "tt0434541", - "tt0078343", - "tt0237572", - "tt0068654", - "tt1756632", - "tt0062957", - "tt4771932", - "tt0443527", - "tt4217172", - "tt0122037", - "tt10856726", - "tt0090610", - "tt0042531", - "tt0076709", - "tt0784816", - "tt0042315", - "tt0053768", - "tt2986512", - "tt0484439", - "tt3158440", - "tt0052530", - "tt2665228", - "tt0043546", - "tt0079063", - "tt6578116", - "tt4738360", - "tt1976009", - "tt0180093", - "tt3070242", - "tt8842950", - "tt3032274", - "tt4273562", - "tt3833748", - "tt3699372", - "tt0397039", - "tt8497794", - "tt0086872", - "tt0046754", - "tt3652978", - "tt0089572", - "tt7555072", - "tt0006309", - "tt0108053", - "tt0484382", - "tt0146271", - "tt0012364", - "tt0160401", - "tt0080569", - "tt0084090", - "tt5361488", - "tt0320193", - "tt0113703", - "tt0048441", - "tt0192120", - "tt0029381", - "tt0006032", - "tt1869724", - "tt5864236", - "tt0049126", - "tt0005571", - "tt0005044", - "tt0212720", - "tt0075250", - "tt0309150", - "tt3416828", - "tt1860353", - "tt0419984", - "tt0848537", - "tt2172402", - "tt1094666", - "tt0087277", - "tt0864835", - "tt2387499", - "tt7696328", - "tt1911658", - "tt7215444", - "tt1502712", - "tt0046425", - "tt7704762", - "tt3583688", - "tt5348190", - "tt6237314", - "tt1324999", - "tt3323314", - "tt2934696", - "tt1104001", - "tt9109006", - "tt2604224", - "tt6604050", - "tt0820142", - "tt7825514", - "tt10579468", - "tt3696610", - "tt0454864", - "tt8218662", - "tt0454876", - "tt6234016", - "tt0094226", - "tt4731136", - "tt6838918", - "tt2596246", - "tt0107144", - "tt9411860", - "tt10224134", - "tt0120363", - "tt3512900", - "tt2334871", - "tt2267968", - "tt9251326", - "tt1679335", - "tt0435761", - "tt3079380", - "tt1935859", - "tt6184958", - "tt0277434", - "tt8351424", - "tt2224026", - "tt0317705", - "tt5431950", - "tt0114709", - "tt9358084", - "tt2679042", - "tt0397892", - "tt6029796", - "tt6319714", - "tt1431045", - "tt7843600", - "tt9303030", - "tt8354344", - "tt3682448", - "tt2091256", - "tt5782140", - "tt4654844", - "tt8649148", - "tt0065550", - "tt0092099", - "tt7099756", - "tt0069398", - "tt7207006", - "tt3655452", - "tt2267998", - "tt8093094", - "tt7597454", - "tt3512486", - "tt7973608", - "tt6669590", - "tt0063127", - "tt0145955", - "tt0022017", - "tt5595364", - "tt8020378", - "tt6499572", - "tt2374452", - "tt4846340", - "tt4046784", - "tt6294822", - "tt0206827", - "tt1816012", - "tt6770548", - "tt6197848", - "tt0011841", - "tt1529567", - "tt5463088", - "tt0831888", - "tt1111821", - "tt1485796", - "tt2673996", - "tt2235815", - "tt1587157", - "tt3385516", - "tt1790864", - "tt0107681", - "tt0443690", - "tt1512316", - "tt2316204", - "tt2361423", - "tt2417218", - "tt0089374", - "tt0108461", - "tt3402236", - "tt0026185", - "tt0095403", - "tt0142247", - "tt3830998", - "tt0142245", - "tt0418141", - "tt5480520", - "tt0400370", - "tt0035749", - "tt0015202", - "tt0061552", - "tt4400714", - "tt0066517", - "tt0069421", - "tt3726252", - "tt0069783", - "tt2873282", - "tt0074462", - "tt0423977", - "tt3847390", - "tt3916100", - "tt2065952", - "tt1245534", - "tt4774372", - "tt2690718", - "tt1869718", - "tt0255773", - "tt0077740", - "tt0096341", - "tt2190193", - "tt2025516", - "tt6026818", - "tt2833768", - "tt1388595", - "tt1828127", - "tt2011314", - "tt4571194", - "tt1107142", - "tt1713799", - "tt0064866", - "tt7958736", - "tt2283336", - "tt1365540", - "tt2938978", - "tt5328796", - "tt2328922", - "tt6295106", - "tt9759938", - "tt0353164", - "tt8711274", - "tt1976540", - "tt0382301", - "tt2004361", - "tt1107134", - "tt6296148", - "tt0119280", - "tt9647330", - "tt0385568", - "tt5323662", - "tt1739212", - "tt5731132", - "tt1741669", - "tt0113326", - "tt3689910", - "tt2888046", - "tt5973984", - "tt3245794", - "tt4769824", - "tt6099462", - "tt3739614", - "tt6449358", - "tt0347791", - "tt1564058", - "tt2364071", - "tt6035470", - "tt0466947", - "tt0428144", - "tt1831611", - "tt0494222", - "tt0109456", - "tt5871184", - "tt0404286", - "tt2540072", - "tt0060167", - "tt0354210", - "tt4264202", - "tt0104146", - "tt0070288", - "tt0120371", - "tt0127357", - "tt1646232", - "tt1130089", - "tt1206345", - "tt2065968", - "tt08439204", - "tt1690470", - "tt4007502", - "tt5884052", - "tt1505118", - "tt3391348", - "tt5994834", - "tt0063612", - "tt0061515", - "tt0120692", - "tt0104361", - "tt5781006", - "tt0824326", - "tt4698718", - "tt9301146", - "tt0108598", - "tt0037363", - "tt3954876", - "tt10801352", - "tt4448290", - "tt7080960", - "tt1082588", - "tt0390521", - "tt0120245", - "tt10260408", - "tt9184016", - "tt3263598", - "tt5762174", - "tt1411956", - "tt3258142", - "tt0289365", - "tt3231010", - "tt2180529", - "tt0089050", - "tt2111283", - "tt2632708", - "tt1948394", - "tt2224075", - "tt1454110", - "tt0270291", - "tt1018886", - "tt1821374", - "tt0109838", - "tt0100024", - "tt0130445", - "tt0109609", - "tt0436595", - "tt1800759", - "tt0922522", - "tt0109049", - "tt1433813", - "tt0108148", - "tt3579524", - "tt0115952", - "tt4337072", - "tt4016942", - "tt0270444", - "tt0838265", - "tt2636124", - "tt0387412", - "tt0465925", - "tt0813789", - "tt3017864", - "tt0007194", - "tt0823671", - "tt6186940", - "tt0858497", - "tt0140803", - "tt2460976", - "tt0049949", - "tt0005812", - "tt3399998", - "tt0016332", - "tt0005810", - "tt4154796", - "tt0064855", - "tt0005489", - "tt9206798", - "tt0143808", - "tt0083291", - "tt1265587", - "tt0101357", - "tt3120960", - "tt0279919", - "tt0020697", - "tt0036104", - "tt1024215", - "tt3897880", - "tt5572720", - "tt0177240", - "tt2078523", - "tt1849027", - "tt0353515", - "tt7275822", - "tt1629443", - "tt0331068", - "tt0099158", - "tt0095941", - "tt0119595", - "tt3742300", - "tt1675758", - "tt5458888", - "tt3293138", - "tt0465517", - "tt0081366", - "tt0061761", - "tt5320124", - "tt0050872", - "tt4820162", - "tt0898949", - "tt2527560", - "tt7158736", - "tt7776838", - "tt6669086", - "tt2604846", - "tt0425548", - "tt0056406", - "tt2332857", - "tt0376263", - "tt6423362", - "tt8769848", - "tt0048600", - "tt1764454", - "tt0845464", - "tt3378384", - "tt2327948", - "tt0104503", - "tt5328006", - "tt1794886", - "tt7294636", - "tt8991338", - "tt3714492", - "tt1622566", - "tt2592582", - "tt2224073", - "tt1671582", - "tt1117379", - "tt3619972", - "tt1079974", - "tt0133104", - "tt2093928", - "tt2150163", - "tt0366598", - "tt0416051", - "tt0258534", - "tt3576666", - "tt2426266", - "tt8648640", - "tt0362942", - "tt0086606", - "tt1802727", - "tt4804142", - "tt0044876", - "tt0892391", - "tt6029724", - "tt0077332", - "tt0083284", - "tt0135037", - "tt0070119", - "tt2180578", - "tt1259570", - "tt4224478", - "tt2391821", - "tt1703049", - "tt0163494", - "tt0042970", - "tt0072008", - "tt0082525", - "tt0067236", - "tt0075432", - "tt8028526", - "tt0048543", - "tt3455730", - "tt0047087", - "tt6382412", - "tt1578709", - "tt5892486", - "tt4450624", - "tt5931670", - "tt0111293", - "tt4669296", - "tt0117757", - "tt1352386", - "tt5337544", - "tt5580688", - "tt6183104", - "tt5634088", - "tt3949952", - "tt6256872", - "tt0069279", - "tt1536437", - "tt0091902", - "tt2917336", - "tt5589362", - "tt1948563", - "tt1646922", - "tt7614404", - "tt6354568", - "tt0067025", - "tt0297721", - "tt1039651", - "tt0063159", - "tt2411128", - "tt7480958", - "tt3723780", - "tt7051624", - "tt0066612", - "tt0073941", - "tt5969404", - "tt8917964", - "tt0071544", - "tt5699154", - "tt0077373", - "tt4097826", - "tt0015224", - "tt8888186", - "tt2332573", - "tt3830194", - "tt2066051", - "tt1776196", - "tt0075852", - "tt0056012", - "tt5284414", - "tt5216534", - "tt1468322", - "tt1726286", - "tt4307880", - "tt6548966", - "tt0485323", - "tt2476624", - "tt8385474", - "tt1675163", - "tt5519566", - "tt1298644", - "tt6874878", - "tt2085795", - "tt0047937", - "tt5004766", - "tt7752126", - "tt0069753", - "tt0100581", - "tt0071537", - "tt2375379", - "tt0069017", - "tt2396429", - "tt1105263", - "tt0068629", - "tt1485763", - "tt1148261", - "tt1339302", - "tt0090186", - "tt1715210", - "tt9775360", - "tt1599296", - "tt2091885", - "tt2183302", - "tt5251328", - "tt1426325", - "tt0085872", - "tt0810924", - "tt0780492", - "tt0093563", - "tt0068310", - "tt1241330", - "tt0065602", - "tt6542108", - "tt0089206", - "tt0107165", - "tt0870937", - "tt0166789", - "tt0293416", - "tt0193253", - "tt3003668", - "tt0084674", - "tt7046002", - "tt6739094", - "tt0075415", - "tt0232114", - "tt3206074", - "tt4235644", - "tt3306776", - "tt0069540", - "tt3538328", - "tt0102812", - "tt0270933", - "tt2048804", - "tt6848624", - "tt1636780", - "tt1754177", - "tt1235790", - "tt2423504", - "tt3288930", - "tt0806102", - "tt10578106", - "tt4123262", - "tt1869235", - "tt0497633", - "tt1843961", - "tt2935564", - "tt0110153", - "tt0162236", - "tt2230422", - "tt0090197", - "tt0838178", - "tt1232824", - "tt0073031", - "tt0961108", - "tt1922612", - "tt4919484", - "tt8247470", - "tt7692822", - "tt7089628", - "tt6172460", - "tt9657544", - "tt0192701", - "tt4604246", - "tt9100028", - "tt8976710", - "tt0493322", - "tt2230434", - "tt4172746", - "tt0184503", - "tt0049446", - "tt0113142", - "tt5311514", - "tt0062363", - "tt0116390", - "tt0783601", - "tt0087344", - "tt4590806", - "tt0107027", - "tt5396646", - "tt0094884", - "tt1630254", - "tt0314111", - "tt0064860", - "tt0366526", - "tt0399102", - "tt10720098", - "tt7493808", - "tt7487314", - "tt0097444", - "tt10308686", - "tt9904820", - "tt0279112", - "tt3958494", - "tt5066564", - "tt9185816", - "tt0109916", - "tt0071992", - "tt4377918", - "tt9315000", - "tt0113187", - "tt2585736", - "tt0101962", - "tt6143850", - "tt5101956", - "tt10431274", - "tt0255198", - "tt3263758", - "tt5441540", - "tt6890376", - "tt3171784", - "tt7615302", - "tt0470679", - "tt0104352", - "tt0049169", - "tt2188010", - "tt6782276", - "tt0291341", - "tt8819596", - "tt6034164", - "tt6295304", - "tt1037223", - "tt0295529", - "tt0090888", - "tt3190158", - "tt0088256", - "tt2948266", - "tt4188436", - "tt2139919", - "tt10497352", - "tt1229405", - "tt6052206", - "tt2275769", - "tt1727523", - "tt0110123", - "tt10662450", - "tt3484128", - "tt9451848", - "tt3638508", - "tt2837830", - "tt0063308", - "tt9724068", - "tt9840958", - "tt2322296", - "tt0105810", - "tt2234419", - "tt3462676", - "tt0036400", - "tt1347008", - "tt0075109", - "tt2566350", - "tt0119406", - "tt1554966", - "tt2125501", - "tt3204012", - "tt0081432", - "tt1333667", - "tt3457486", - "tt1957996", - "tt1261900", - "tt3053202", - "tt0080159", - "tt0330548", - "tt4102722", - "tt6391356", - "tt0039595", - "tt1462397", - "tt5561598", - "tt7334346", - "tt10087988", - "tt3016642", - "tt0457286", - "tt5753236", - "tt4151002", - "tt6932340", - "tt1560985", - "tt5266456", - "tt6388200", - "tt6704988", - "tt6961862", - "tt3760702", - "tt5845440", - "tt0054377", - "tt4325644", - "tt5505862", - "tt6525952", - "tt5098548", - "tt1358232", - "tt2106514", - "tt0062151", - "tt1698010", - "tt0093871", - "tt2048865", - "tt1093842", - "tt0066924", - "tt1931549", - "tt3178174", - "tt0081696", - "tt0062082", - "tt0069390", - "tt0026246", - "tt0118647", - "tt0108102", - "tt0098513", - "tt0068334", - "tt0278435", - "tt0104265", - "tt0247425", - "tt1981115", - "tt0263734", - "tt4073682", - "tt10240612", - "tt0120772", - "tt3204734", - "tt10644588", - "tt0318411", - "tt0491747", - "tt1764285", - "tt5031332", - "tt7006206", - "tt0286797", - "tt2339703", - "tt6032328", - "tt1810858", - "tt6389316", - "tt1239242", - "tt0800369", - "tt10624458", - "tt1331064", - "tt0050783", - "tt0100589", - "tt0068416", - "tt3227442", - "tt0096332", - "tt7061818", - "tt7266728", - "tt10136908", - "tt1464763", - "tt4875504", - "tt3469592", - "tt0078950", - "tt0077188", - "tt0068152", - "tt0145503", - "tt6545160", - "tt3824950", - "tt0226800", - "tt8985618", - "tt4897358", - "tt0082766", - "tt5116230", - "tt0067429", - "tt2555268", - "tt2400894", - "tt0058631", - "tt2101347", - "tt0116571", - "tt6608386", - "tt0075984", - "tt0083131", - "tt2113007", - "tt0081112", - "tt1534335", - "tt0065997", - "tt0092137", - "tt3686998", - "tt0070039", - "tt8050084", - "tt10638540", - "tt0861772", - "tt0230512", - "tt5777628", - "tt0114011", - "tt5243490", - "tt0085640", - "tt0123324", - "tt3884282", - "tt8961266", - "tt7844166", - "tt0371746", - "tt3113456", - "tt2076850", - "tt7645122", - "tt0092997", - "tt0339412", - "tt7645502", - "tt1009012", - "tt2401147", - "tt0071585", - "tt1300854", - "tt2926926", - "tt2062996", - "tt7737502", - "tt0085328", - "tt1830792", - "tt1293751", - "tt0082000", - "tt6231398", - "tt0031887", - "tt4733736", - "tt0380066", - "tt4857806", - "tt0069809", - "tt6874134", - "tt1228705", - "tt0106926", - "tt5358714", - "tt0988982", - "tt3009772", - "tt0093207", - "tt0114563", - "tt0074360", - "tt0064208", - "tt9144476", - "tt6659936", - "tt0077559", - "tt1525835", - "tt4618398", - "tt1160524", - "tt0092501", - "tt0058567", - "tt0054067", - "tt0093306", - "tt2358911", - "tt1481363", - "tt2210479", - "tt2358913", - "tt1839494", - "tt0142237", - "tt0069191", - "tt0353014", - "tt0286737", - "tt4944658", - "tt0110725", - "tt1121794", - "tt3717532", - "tt5715828", - "tt1414581", - "tt0142236", - "tt1645048", - "tt3361792", - "tt1527788", - "tt0081318", - "tt0055377", - "tt0039402", - "tt2704212", - "tt2371287", - "tt2263944", - "tt0142242", - "tt0142241", - "tt1125254", - "tt3819668", - "tt3541262", - "tt0085127", - "tt1911533", - "tt7689946", - "tt6083230", - "tt0028816", - "tt6290258", - "tt2308711", - "tt6878382", - "tt5878194", - "tt7449376", - "tt6490930", - "tt9153882", - "tt7238634", - "tt3993350", - "tt0107692", - "tt7942746", - "tt0758742", - "tt0810827", - "tt9759612", - "tt0068524", - "tt4839422", - "tt0033740", - "tt0037635", - "tt1043842", - "tt1080926", - "tt0860907", - "tt0069266", - "tt0860906", - "tt0923811", - "tt0910949", - "tt3392330", - "tt0065143", - "tt1694115", - "tt0401233", - "tt8234502", - "tt3886508", - "tt8315128", - "tt6949868", - "tt4255622", - "tt2614776", - "tt0040522", - "tt5097070", - "tt4092774", - "tt3530882", - "tt8318702", - "tt5531032", - "tt2649274", - "tt7116000", - "tt7014234", - "tt8571404", - "tt3865478", - "tt3699354", - "tt4668860", - "tt0072195", - "tt6807324", - "tt8123728", - "tt10369978", - "tt5254198", - "tt0969216", - "tt4875844", - "tt5259184", - "tt8109800", - "tt3966500", - "tt7711764", - "tt1506950", - "tt2198063", - "tt3692652", - "tt0075740", - "tt1891806", - "tt5460858", - "tt4103306", - "tt0065568", - "tt4664568", - "tt2355871", - "tt0049774", - "tt0047926", - "tt5241534", - "tt3461882", - "tt0049693", - "tt6850758", - "tt0047962", - "tt0060311", - "tt0047133", - "tt0048423", - "tt1691832", - "tt0046743", - "tt6315750", - "tt0048077", - "tt0076049", - "tt06064378", - "tt0120576", - "tt0048420", - "tt0054099", - "tt8525560", - "tt0026718", - "tt6075718", - "tt0101439", - "tt0373450", - "tt2256811", - "tt3466476", - "tt8488340", - "tt6513406", - "tt6461526", - "tt8549254", - "tt8420952", - "tt5464204", - "tt8747288", - "tt0087980", - "tt8880188", - "tt4064488", - "tt2762662", - "tt0114885", - "tt0090768", - "tt0821638", - "tt0086366", - "tt0112437", - "tt9013956", - "tt0375104", - "tt0074207", - "tt0460792", - "tt0084675", - "tt0476995", - "tt0081480", - "tt0083170", - "tt0052005", - "tt4063438", - "tt0372279", - "tt10545040", - "tt1284578", - "tt6109168", - "tt4143306", - "tt0380728", - "tt7972178", - "tt0110201", - "tt0924263", - "tt5668850", - "tt0106696", - "tt0114794", - "tt0034478", - "tt7031474", - "tt9737150", - "tt0399019", - "tt0163081", - "tt7124090", - "tt0117221", - "tt0163532", - "tt0075347", - "tt0116866", - "tt7461300", - "tt0089866", - "tt0261739", - "tt1941704", - "tt6107558", - "tt3687316", - "tt0035230", - "tt0084076", - "tt1398991", - "tt1954617", - "tt5403488", - "tt0928125", - "tt6939372", - "tt9049072", - "tt0023902", - "tt0167925", - "tt0109382", - "tt8706988", - "tt0163849", - "tt0036659", - "tt8020896", - "tt0036621", - "tt0103596", - "tt0038222", - "tt5792490", - "tt1625155", - "tt5325492", - "tt2036416", - "tt7851500", - "tt6434022", - "tt0098690", - "tt5056842", - "tt1673423", - "tt0113292", - "tt5167966", - "tt2972098", - "tt4834622", - "tt0071465", - "tt7753158", - "tt0194314", - "tt3752930", - "tt4195368", - "tt7930006", - "tt5622770", - "tt0071232", - "tt0315521", - "tt4788638", - "tt4231508", - "tt0018037", - "tt3952226", - "tt0221007", - "tt3421246", - "tt2097267", - "tt3419894", - "tt0019254", - "tt0019901", - "tt0019725", - "tt0096003", - "tt0026138", - "tt0015532", - "tt0019760", - "tt3721048", - "tt9382396", - "tt7133580", - "tt0974977", - "tt0017765", - "tt9645348", - "tt5190578", - "tt5178264", - "tt0242695", - "tt2899120", - "tt6848930", - "tt1380784", - "tt0039686", - "tt7335324", - "tt3311020", - "tt5769414", - "tt2812356", - "tt5729246", - "tt5278458", - "tt4717204", - "tt0400174", - "tt3673764", - "tt10131230", - "tt4222732", - "tt5514632", - "tt3404158", - "tt8752440", - "tt0048091", - "tt3958276", - "tt1433001", - "tt5556068", - "tt2500670", - "tt3148576", - "tt5467852", - "tt3182620", - "tt0026261", - "tt6047374", - "tt6269434", - "tt0023594", - "tt0386423", - "tt5460986", - "tt10656752", - "tt1977894", - "tt6078842", - "tt1193092", - "tt9534958", - "tt0080472", - "tt1759744", - "tt0053084", - "tt6269368", - "tt0100318", - "tt6038042", - "tt4180560", - "tt0263265", - "tt8444450", - "tt0114690", - "tt2117892", - "tt0065932", - "tt0286049", - "tt2283017", - "tt0469062", - "tt2509902", - "tt9358044", - "tt2713886", - "tt5117372", - "tt5472614", - "tt8618420", - "tt0414951", - "tt2741624", - "tt0119165", - "tt3029558", - "tt6184932", - "tt0163563", - "tt6865728", - "tt0219671", - "tt3029556", - "tt2363564", - "tt4807908", - "tt1686313", - "tt3812366", - "tt3570006", - "tt3084294", - "tt0112913", - "tt3715896", - "tt5633396", - "tt7266388", - "tt3876372", - "tt0090557", - "tt2546434", - "tt0092214", - "tt8060774", - "tt0068286", - "tt0097005", - "tt0093435", - "tt1786503", - "tt2825120", - "tt7262782", - "tt0097441", - "tt6289898", - "tt10349958", - "tt2656588", - "tt0076916", - "tt0064756", - "tt0049849", - "tt3952246", - "tt0073559", - "tt5735464", - "tt0059740", - "tt4840686", - "tt0057163", - "tt7185492", - "tt2653264", - "tt3846972", - "tt3550344", - "tt0006864", - "tt0070884", - "tt1554523", - "tt4287848", - "tt0054940", - "tt0165489", - "tt1985144", - "tt3709442", - "tt7286500", - "tt0155722", - "tt0906765", - "tt3872778", - "tt5271582", - "tt8999864", - "tt2845166", - "tt0090305", - "tt3399024", - "tt0037175", - "tt1683431", - "tt2770290", - "tt0301181", - "tt1185418", - "tt4552118", - "tt3264102", - "tt1714886", - "tt4995776", - "tt2966934", - "tt2938416", - "tt3343350", - "tt3575624", - "tt8511530", - "tt0945356", - "tt0060794", - "tt2126403", - "tt0101020", - "tt1860355", - "tt6215712", - "tt2137267", - "tt2970510", - "tt9872556", - "tt2166804", - "tt2271387", - "tt2509922", - "tt2518788", - "tt0768116", - "tt2332522", - "tt0068444", - "tt0112446", - "tt1845773", - "tt3311384", - "tt0097052", - "tt1244668", - "tt2499076", - "tt1183732", - "tt1824254", - "tt1693039", - "tt0073836", - "tt3421270", - "tt2345864", - "tt3033478", - "tt3120508", - "tt7906262", - "tt0437086", - "tt7038632", - "tt3131532", - "tt10521638", - "tt7528504", - "tt10442108", - "tt7756492", - "tt9695662", - "tt0039871", - "tt9004516", - "tt0075893", - "tt6776300", - "tt0069995", - "tt10461826", - "tt10654432", - "tt0077532", - "tt9038026", - "tt5300154", - "tt10584048", - "tt1226766", - "tt4598848", - "tt7223050", - "tt0067245", - "tt4938484", - "tt1456660", - "tt0056127", - "tt6332276", - "tt3924262", - "tt0071413", - "tt1570583", - "tt3995006", - "tt5168832", - "tt0118818", - "tt1893218", - "tt4284010", - "tt0421199", - "tt3043590", - "tt4460032", - "tt3982706", - "tt0024360", - "tt4626970", - "tt0065760", - "tt0047073", - "tt0074085", - "tt0128142", - "tt0036125", - "tt0035386", - "tt9638206", - "tt0035007", - "tt4911408", - "tt5079362", - "tt2234462", - "tt0110771", - "tt1683048", - "tt6255230", - "tt0847212", - "tt2713938", - "tt7449274", - "tt8925102", - "tt6601502", - "tt7374952", - "tt5125894", - "tt4606514", - "tt7286492", - "tt0106698", - "tt7358686", - "tt7946422", - "tt4113346", - "tt9838372", - "tt1325773", - "tt3157640", - "tt0077924", - "tt0082399", - "tt1737591", - "tt0207359", - "tt3894404", - "tt4477106", - "tt5553436", - "tt0847187", - "tt1754546", - "tt5058340", - "tt2247566", - "tt0040979", - "tt6189344", - "tt2909724", - "tt2182163", - "tt0220507", - "tt3341268", - "tt6692368", - "tt0118662", - "tt3240784", - "tt0047259", - "tt1385633", - "tt5539264", - "tt5644726", - "tt0054906", - "tt5613848", - "tt2331143", - "tt5092272", - "tt4143384", - "tt4162910", - "tt0096114", - "tt0070121", - "tt3125652", - "tt3272570", - "tt3118874", - "tt3504604", - "tt0103262", - "tt5605076", - "tt7007696", - "tt3707114", - "tt4143508", - "tt1598725", - "tt1696192", - "tt2822584", - "tt1827378", - "tt0083281", - "tt7890550", - "tt3785740", - "tt4126312", - "tt0077485", - "tt5309954", - "tt0416207", - "tt2417154", - "tt8236566", - "tt2301147", - "tt3905662", - "tt2937254", - "tt4717798", - "tt0086013", - "tt0867411", - "tt0093175", - "tt1721693", - "tt3630556", - "tt1403854", - "tt1236472", - "tt2350608", - "tt4066748", - "tt3367686", - "tt3484800", - "tt1401664", - "tt2440214", - "tt0490935", - "tt2025526", - "tt3351386", - "tt1297943", - "tt3715406", - "tt0082009", - "tt3544654", - "tt1844025", - "tt2737926", - "tt0041268", - "tt3685922", - "tt0111776", - "tt0807726", - "tt2244889", - "tt1542485", - "tt4229236", - "tt2299368", - "tt4458368", - "tt1600429", - "tt1403129", - "tt0206754", - "tt2440362", - "tt0297144", - "tt0052629", - "tt3546370", - "tt3339376", - "tt3572132", - "tt0040481", - "tt2409300", - "tt2112307", - "tt1384926", - "tt3458236", - "tt2582426", - "tt0077993", - "tt2005363", - "tt2077766", - "tt1401663", - "tt1837494", - "tt2368672", - "tt2466346", - "tt3179402", - "tt2208568", - "tt2086853", - "tt3237154", - "tt0455475", - "tt2854894", - "tt6159734", - "tt0088128", - "tt1885448", - "tt0025037", - "tt1344008", - "tt0064991", - "tt9780416", - "tt0077372", - "tt0077362", - "tt6716912", - "tt0045991", - "tt0040740", - "tt1986089", - "tt6792282", - "tt0122689", - "tt1677603", - "tt4885784", - "tt1806906", - "tt0089501", - "tt7941194", - "tt1504416", - "tt0056417", - "tt1865450", - "tt0064886", - "tt8401820", - "tt2546394", - "tt1572503", - "tt0360032", - "tt2129928", - "tt0053434", - "tt0928406", - "tt2510434", - "tt3861390", - "tt02609758", - "tt0036699", - "tt7177324", - "tt5658240", - "tt2308260", - "tt7561364", - "tt0077838", - "tt9451086", - "tt1869491", - "tt0067457", - "tt1666792", - "tt2583814", - "tt1478841", - "tt4082506", - "tt2396566", - "tt4136828", - "tt0097539", - "tt2393817", - "tt2721152", - "tt2072029", - "tt0093489", - "tt0058294", - "tt0778631", - "tt10532840", - "tt0346578", - "tt2205904", - "tt1816608", - "tt1753967", - "tt3809492", - "tt0064519", - "tt0062301", - "tt1636849", - "tt1242544", - "tt2282917", - "tt1806805", - "tt0484855", - "tt0077800", - "tt3184096", - "tt0078405", - "tt2177827", - "tt0072209", - "tt1703923", - "tt2360446", - "tt1606636", - "tt1350546", - "tt2459156", - "tt1971571", - "tt0065579", - "tt0102458", - "tt1087841", - "tt0412637", - "tt2066048", - "tt0069451", - "tt6284564", - "tt0315930", - "tt0004972", - "tt2295196", - "tt0087803", - "tt8785052", - "tt0107565", - "tt0049083", - "tt1188988", - "tt0140397", - "tt0078269", - "tt4264716", - "tt9146030", - "tt0092641", - "tt0076645", - "tt6522084", - "tt5372350", - "tt0024028", - "tt6126346", - "tt0040370", - "tt0265808", - "tt10009434", - "tt9395794", - "tt1056036", - "tt4764490", - "tt0101761", - "tt1368116", - "tt1226232", - "tt9358204", - "tt1815852", - "tt4986926", - "tt4594286", - "tt2274648", - "tt1447793", - "tt0196708", - "tt0074291", - "tt2106550", - "tt0082416", - "tt0429573", - "tt1172571", - "tt1077262", - "tt1907614", - "tt7262882", - "tt0111201", - "tt0118998", - "tt0073036", - "tt1109574", - "tt2181959", - "tt7775622", - "tt0057345", - "tt1728976", - "tt0057091", - "tt0078058", - "tt1034305", - "tt0354690", - "tt0036055", - "tt0048512", - "tt0120133", - "tt0113552", - "tt0066491", - "tt1956671", - "tt7582890", - "tt1221208", - "tt2403393", - "tt6226908", - "tt0020163", - "tt0053604", - "tt0071487", - "tt0057960", - "tt0074901", - "tt0075824", - "tt0041719", - "tt0066534", - "tt0015841", - "tt0073858", - "tt0021375", - "tt0024216", - "tt0058249", - "tt0322824", - "tt0035881", - "tt0910559", - "tt0079013", - "tt0206394", - "tt0109771", - "tt0034978", - "tt5424984", - "tt0044364", - "tt0022718", - "tt0054599", - "tt0139153", - "tt8546396", - "tt0106364", - "tt0050083", - "tt0143127", - "tt0233298", - "tt1946502", - "tt0086264", - "tt7962932", - "tt1787759", - "tt1194271", - "tt4420040", - "tt5002838", - "tt1712170", - "tt0091168", - "tt1754438", - "tt1131728", - "tt2622988", - "tt0024941", - "tt0770728", - "tt4621398", - "tt0027068", - "tt6493648", - "tt0150926", - "tt1813519", - "tt2196430", - "tt2061822", - "tt0373926", - "tt0331468", - "tt1704201", - "tt1628039", - "tt1618421", - "tt0020447", - "tt1651328", - "tt1718755", - "tt0019701", - "tt0142092", - "tt1762300", - "tt1646967", - "tt0023393", - "tt0023855", - "tt2215719", - "tt2095742", - "tt2402539", - "tt1785389", - "tt2014202", - "tt4859168", - "tt2139881", - "tt0051759", - "tt0130637", - "tt6221660", - "tt1698008", - "tt3270538", - "tt0056196", - "tt8761814", - "tt6187794", - "tt7649620", - "tt1493157", - "tt2339367", - "tt0278295", - "tt0217355", - "tt6166196", - "tt3311588", - "tt0043949", - "tt0117038", - "tt5285494", - "tt0029819", - "tt3282076", - "tt1360767", - "tt0050171", - "tt0258000", - "tt10466908", - "tt10219384", - "tt8666494", - "tt3294732", - "tt7575440", - "tt0038190", - "tt1602098", - "tt1152827", - "tt4444956", - "tt0822868", - "tt1452599", - "tt0044829", - "tt0120176", - "tt1563704", - "tt7268388", - "tt1183251", - "tt1582621", - "tt1231580", - "tt1118045", - "tt1223236", - "tt1560957", - "tt1529635", - "tt1204315", - "tt1503769", - "tt1610528", - "tt8228538", - "tt4459156", - "tt1334512", - "tt1442486", - "tt1247400", - "tt1561768", - "tt1139115", - "tt5613402", - "tt1173907", - "tt6648932", - "tt1143143", - "tt4913966", - "tt2177843", - "tt5837976", - "tt0305396", - "tt6722030", - "tt6675736", - "tt10327712", - "tt0805619", - "tt0837796", - "tt0796368", - "tt0815138", - "tt0120102", - "tt0469640", - "tt1073241", - "tt1042503", - "tt1093824", - "tt0961097", - "tt1086340", - "tt1079964", - "tt0349467", - "tt0405469", - "tt1033468", - "tt0082940", - "tt0816539", - "tt0414055", - "tt0444682", - "tt0808417", - "tt1007018", - "tt1003118", - "tt0050302", - "tt0814131", - "tt0439289", - "tt0431197", - "tt0049224", - "tt0114728", - "tt0102443", - "tt0102994", - "tt0460810", - "tt5350358", - "tt0772193", - "tt0435696", - "tt0395495", - "tt0064664", - "tt0138324", - "tt0484207", - "tt0379557", - "tt0044537", - "tt0479948", - "tt0478337", - "tt0097202", - "tt4283414", - "tt2633666", - "tt0094061", - "tt0082612", - "tt0072136", - "tt0082499", - "tt0093876", - "tt0055318", - "tt1684567", - "tt0075764", - "tt3808102", - "tt0092830", - "tt0057102", - "tt0070782", - "tt5734548", - "tt6126492", - "tt3832126", - "tt4862506", - "tt1068646", - "tt5457484", - "tt0299988", - "tt6772246", - "tt0084099", - "tt0937347", - "tt0062829", - "tt0080066", - "tt0065595", - "tt0100506", - "tt0062732", - "tt1196630", - "tt3853830", - "tt1269734", - "tt0039211", - "tt0053961", - "tt0089269", - "tt2415710", - "tt0496350", - "tt0128232", - "tt0448172", - "tt0051380", - "tt7207398", - "tt0400347", - "tt1078899", - "tt0259288", - "tt2482856", - "tt0052639", - "tt0060866", - "tt0322659", - "tt1386011", - "tt2251306", - "tt0160644", - "tt1684936", - "tt0975673", - "tt0043574", - "tt5113926", - "tt0319531", - "tt0449077", - "tt2814080", - "tt0348505", - "tt0448115", - "tt6418918", - "tt1504385", - "tt3883282", - "tt0071080", - "tt0400944", - "tt7159616", - "tt4076980", - "tt0497116", - "tt0488612", - "tt0199314", - "tt3717234", - "tt0770742", - "tt4241824", - "tt8663942", - "tt10076722", - "tt0251656", - "tt6858002", - "tt6632338", - "tt0405832", - "tt3201736", - "tt0065230", - "tt5421078", - "tt0047680", - "tt8484012", - "tt0250494", - "tt3074952", - "tt1182345", - "tt6411748", - "tt4769214", - "tt4078160", - "tt0435716", - "tt0083096", - "tt3244786", - "tt0067658", - "tt0051114", - "tt6076226", - "tt0070770", - "tt0070687", - "tt3613314", - "tt0047279", - "tt0050771", - "tt5153860", - "tt0074703", - "tt0074608", - "tt1261046", - "tt0100079", - "tt0095286", - "tt3147336", - "tt0068619", - "tt7302054", - "tt0090750", - "tt1785277", - "tt0041332", - "tt0419491", - "tt0057267", - "tt1942831", - "tt1663628", - "tt0071857", - "tt3027716", - "tt0068529", - "tt8998472", - "tt0059503", - "tt7298400", - "tt0078797", - "tt5457926", - "tt0075838", - "tt3465710", - "tt8115320", - "tt0010435", - "tt0002130", - "tt8184202", - "tt0011293", - "tt0028436", - "tt0011144", - "tt7336572", - "tt4717402", - "tt0087246", - "tt0051404", - "tt5258726", - "tt0113464", - "tt0065518", - "tt4331776", - "tt2217790", - "tt3663680", - "tt2040398", - "tt4766342", - "tt7342170", - "tt2949296", - "tt2319739", - "tt0093416", - "tt0092298", - "tt5163286", - "tt1943014", - "tt0058403", - "tt1390539", - "tt0214871", - "tt0045339", - "tt0073615", - "tt0073901", - "tt4937564", - "tt2769828", - "tt1068669", - "tt0077318", - "tt1087524", - "tt0075294", - "tt6336270", - "tt5933560", - "tt3567194", - "tt0049431", - "tt0047947", - "tt4577344", - "tt0099377", - "tt4843046", - "tt0082812", - "tt1651894", - "tt0775543", - "tt0092933", - "tt3899262", - "tt1290472", - "tt1240538", - "tt4509084", - "tt0110307", - "tt6483364", - "tt2807548", - "tt4340720", - "tt2978576", - "tt0096769", - "tt0096464", - "tt5657932", - "tt1367177", - "tt2734110", - "tt0105410", - "tt0411267", - "tt2188831", - "tt4765610", - "tt6268882", - "tt0100618", - "tt3465302", - "tt6741026", - "tt6140354", - "tt7043148", - "tt2553444", - "tt2048905", - "tt3986352", - "tt0075638", - "tt3640710", - "tt3495774", - "tt4110978", - "tt2516500", - "tt2179211", - "tt0796307", - "tt0027905", - "tt3249352", - "tt4624532", - "tt5865284", - "tt4880942", - "tt0055198", - "tt0116922", - "tt3188994", - "tt0301214", - "tt0023245", - "tt0076820", - "tt0027200", - "tt0057463", - "tt5460522", - "tt6198946", - "tt10239930", - "tt3141846", - "tt4183140", - "tt6014472", - "tt0074372", - "tt1440379", - "tt0065851", - "tt2450440", - "tt0070814", - "tt2420166", - "tt6215044", - "tt3042626", - "tt0051565", - "tt0070222", - "tt5152640", - "tt0039931", - "tt1290471", - "tt2298394", - "tt0051028", - "tt0066585", - "tt0084633", - "tt7083526", - "tt4519006", - "tt0113080", - "tt0064694", - "tt1265621", - "tt1922679", - "tt1179071", - "tt5767628", - "tt2461340", - "tt2293750", - "tt0056625", - "tt1394329", - "tt2805976", - "tt0069715", - "tt2069955", - "tt9036998", - "tt0099524", - "tt5610626", - "tt0067309", - "tt0497316", - "tt3350890", - "tt6063648", - "tt6170682", - "tt6581616", - "tt0330795", - "tt5222646", - "tt7049542", - "tt0093456", - "tt8417466", - "tt8900984", - "tt5504222", - "tt0970453", - "tt2909196", - "tt3741188", - "tt5704912", - "tt2024483", - "tt0412523", - "tt5564932", - "tt3040216", - "tt10581102", - "tt2620254", - "tt1590285", - "tt2018136", - "tt5788866", - "tt2294743", - "tt7715988", - "tt7236434", - "tt5281134", - "tt4930242", - "tt2369410", - "tt6740154", - "tt1930308", - "tt1754830", - "tt6015760", - "tt5164238", - "tt0061597", - "tt3295354", - "tt0114743", - "tt3250650", - "tt4072296", - "tt10516390", - "tt0275039", - "tt0077132", - "tt0241687", - "tt0086862", - "tt1509276", - "tt0065895", - "tt0065761", - "tt0058700", - "tt0047376", - "tt1764657", - "tt8717660", - "tt0293324", - "tt0043892", - "tt0043809", - "tt0275309", - "tt0064265", - "tt6164014", - "tt0014532", - "tt0046757", - "tt0069518", - "tt0090213", - "tt0086036", - "tt0049286", - "tt6348138", - "tt0045554", - "tt0051980", - "tt0045296", - "tt0043899", - "tt2664264", - "tt0055082", - "tt0069806", - "tt0053388", - "tt0392908", - "tt0046126", - "tt9089294", - "tt0044685", - "tt6288290", - "tt1650060", - "tt10050766", - "tt10325070", - "tt3504226", - "tt8242812", - "tt8438836", - "tt0042727", - "tt0061814", - "tt0046267", - "tt3014910", - "tt0064473", - "tt0046729", - "tt0061189", - "tt0044941", - "tt0105824", - "tt0046882", - "tt1533817", - "tt0050858", - "tt0042367", - "tt0042310", - "tt0043734", - "tt6754750", - "tt0050631", - "tt1468387", - "tt0072263", - "tt0323808", - "tt0065856", - "tt0056138", - "tt0033467", - "tt0068502", - "tt0016630", - "tt4151192", - "tt0052933", - "tt0047445", - "tt0082138", - "tt7580902", - "tt1709122", - "tt7207890", - "tt2112277", - "tt0104753", - "tt7983678", - "tt7890946", - "tt0069134", - "tt0102067", - "tt3955894", - "tt0106913", - "tt0758740", - "tt0072761", - "tt10254986", - "tt5341032", - "tt5770836", - "tt3084028", - "tt5827590", - "tt5089534", - "tt4415360", - "tt8099132", - "tt6849786", - "tt0077234", - "tt0046250", - "tt1210059", - "tt8660842", - "tt6353976", - "tt0047577", - "tt6490532", - "tt3170458", - "tt0036377", - "tt5425264", - "tt0039017", - "tt0040662", - "tt0088457", - "tt0045659", - "tt0046808", - "tt0052296", - "tt0039074", - "tt0040367", - "tt0044943", - "tt4442130", - "tt1545986", - "tt0045178", - "tt1202222", - "tt3294746", - "tt0040369", - "tt0044754", - "tt0039335", - "tt0034742", - "tt0041737", - "tt2494384", - "tt0298826", - "tt0033533", - "tt0076175", - "tt0065086", - "tt0991167", - "tt3200980", - "tt0042539", - "tt0047029", - "tt0068290", - "tt0037794", - "tt2325517", - "tt0040978", - "tt0093227", - "tt0104812", - "tt2210834", - "tt2911342", - "tt0850677", - "tt0038008", - "tt0040068", - "tt0051879", - "tt1059887", - "tt1276107", - "tt0060884", - "tt0062424", - "tt0038494", - "tt4955566", - "tt0038259", - "tt5958178", - "tt0074597", - "tt1186803", - "tt2611626", - "tt0084938", - "tt4145304", - "tt4950110", - "tt0064393", - "tt0077629", - "tt0119429", - "tt10559318", - "tt0047013", - "tt1168662", - "tt2040578", - "tt0050432", - "tt0036591", - "tt2924442", - "tt0817545", - "tt6230134", - "tt2977090", - "tt0067820", - "tt0101891", - "tt0095904", - "tt0060897", - "tt1340123", - "tt0048990", - "tt0077945", - "tt0075268", - "tt0091829", - "tt0087222", - "tt2130142", - "tt3958780", - "tt3727202", - "tt1090671", - "tt0106689", - "tt5735280", - "tt0050763", - "tt4706888", - "tt0119577", - "tt2724532", - "tt1617620", - "tt3957956", - "tt3093522", - "tt0057918", - "tt3511596", - "tt0047977", - "tt0021079", - "tt0046719", - "tt0035317", - "tt0072737", - "tt0036349", - "tt0139639", - "tt0025586", - "tt0023694", - "tt0035318", - "tt0022941", - "tt0114898", - "tt0029843", - "tt0039220", - "tt0036348", - "tt0086904", - "tt0061683", - "tt5092708", - "tt4838614", - "tt0060474", - "tt0401696", - "tt0092128", - "tt6418778", - "tt2313189", - "tt2949196", - "tt0024991", - "tt0286716", - "tt8242160", - "tt1332134", - "tt7428820", - "tt0061806", - "tt3383262", - "tt8613876", - "tt0043455", - "tt0219466", - "tt0033676", - "tt7069496", - "tt0020768", - "tt0026955", - "tt0031022", - "tt0028818", - "tt0067483", - "tt0057263", - "tt0415160", - "tt2499472", - "tt3534282", - "tt1321861", - "tt0068732", - "tt0024240", - "tt5580536", - "tt0037149", - "tt0031397", - "tt0032146", - "tt1790621", - "tt0031448", - "tt1107859", - "tt0027672", - "tt0027893", - "tt3286560", - "tt0033159", - "tt0027849", - "tt0030663", - "tt0027876", - "tt0086515", - "tt0063293", - "tt0095302", - "tt0091969", - "tt0030545", - "tt1709654", - "tt0066849", - "tt0069005", - "tt4072326", - "tt0046828", - "tt3007132", - "tt0198652", - "tt0083067", - "tt1273675", - "tt1341341", - "tt0098300", - "tt2923088", - "tt4255110", - "tt3531202", - "tt0099292", - "tt1232838", - "tt0067690", - "tt10110872", - "tt0095867", - "tt3704352", - "tt0080732", - "tt0072139", - "tt0098257", - "tt5189894", - "tt0312549", - "tt7287680", - "tt9490414", - "tt0107530", - "tt0106302", - "tt7399170", - "tt0110913", - "tt0118537", - "tt4200442", - "tt5790274", - "tt4397342", - "tt0113720", - "tt4618800", - "tt5936866", - "tt1659208", - "tt1100119", - "tt5268348", - "tt0087265", - "tt0497329", - "tt0161654", - "tt0080140", - "tt1483831", - "tt0085204", - "tt0058155", - "tt0082511", - "tt5486170", - "tt1117581", - "tt1697851", - "tt0110687", - "tt0039224", - "tt1767319", - "tt3677466", - "tt0067217", - "tt7730928", - "tt0065054", - "tt0067248", - "tt1441956", - "tt0100168", - "tt0036910", - "tt0055597", - "tt0493247", - "tt1316616", - "tt0050782", - "tt1352369", - "tt0067482", - "tt0067713", - "tt0323921", - "tt0085276", - "tt0067805", - "tt0073075", - "tt9174388", - "tt2063011", - "tt0049006", - "tt2392830", - "tt0056868", - "tt6485776", - "tt0089798", - "tt0072709", - "tt1907731", - "tt0337881", - "tt3678476", - "tt0061648", - "tt5493706", - "tt6577814", - "tt5816374", - "tt6298780", - "tt0069436", - "tt3308358", - "tt0089652", - "tt4718500", - "tt6455992", - "tt0430779", - "tt0101376", - "tt0096000", - "tt2169274", - "tt0064515", - "tt0052182", - "tt9140306", - "tt6960770", - "tt0099271", - "tt0060761", - "tt0241605", - "tt0106680", - "tt2815902", - "tt0034798", - "tt1648186", - "tt0083678", - "tt0070468", - "tt10238788", - "tt0423505", - "tt0092637", - "tt0075342", - "tt0069050", - "tt0043879", - "tt0483756", - "tt4660980", - "tt2481198", - "tt3488328", - "tt0076636", - "tt6574272", - "tt0058606", - "tt3202890", - "tt0050933", - "tt0044557", - "tt2063666", - "tt0063049", - "tt0077834", - "tt0045963", - "tt0071424", - "tt0106309", - "tt0059084", - "tt2044801", - "tt1490785", - "tt0064328", - "tt0111503", - "tt0064100", - "tt0077275", - "tt6608132", - "tt4230700", - "tt0112643", - "tt0106339", - "tt5173032", - "tt1861421", - "tt4357714", - "tt0113972", - "tt0039158", - "tt0023470", - "tt1293093", - "tt2517044", - "tt3110818", - "tt3026488", - "tt0954990", - "tt0055201", - "tt0101343", - "tt0088007", - "tt2088832", - "tt5637212", - "tt6067462", - "tt3203954", - "tt3112900", - "tt1592503", - "tt4814760", - "tt7087210", - "tt2077886", - "tt0100606", - "tt7134690", - "tt10575038", - "tt1967560", - "tt9251598", - "tt0458471", - "tt5695764", - "tt3091138", - "tt0022689", - "tt0114938", - "tt0017751", - "tt1867101", - "tt4180514", - "tt0058725", - "tt0118859", - "tt8928500", - "tt5460530", - "tt0060177", - "tt4210080", - "tt0095379", - "tt0071675", - "tt0077756", - "tt0040705", - "tt0036261", - "tt0059557", - "tt2048770", - "tt0116344", - "tt0093286", - "tt0111094", - "tt1745672", - "tt0047550", - "tt0039305", - "tt3268668", - "tt1631707", - "tt0114798", - "tt0059012", - "tt2726552", - "tt0357474", - "tt0109415", - "tt0380817", - "tt0040555", - "tt7290778", - "tt7512276", - "tt0043121", - "tt10525592", - "tt1710533", - "tt0058754", - "tt0038922", - "tt0065916", - "tt3495644", - "tt3289606", - "tt1820488", - "tt1845774", - "tt3317562", - "tt0094746", - "tt2160413", - "tt1735433", - "tt2481498", - "tt6704170", - "tt2979638", - "tt0029682", - "tt0118643", - "tt0052415", - "tt0183678", - "tt0079336", - "tt0043067", - "tt0051077", - "tt8109082", - "tt3955618", - "tt0115580", - "tt0104740", - "tt0019777", - "tt1196340", - "tt0076637", - "tt0808526", - "tt0054269", - "tt0042832", - "tt0079100", - "tt0119937", - "tt0091142", - "tt1657283", - "tt0051773", - "tt3638396", - "tt2597242", - "tt1083448", - "tt0075995", - "tt0041163", - "tt1100051", - "tt2274570", - "tt7961060", - "tt0295667", - "tt8179388", - "tt2112303", - "tt1679204", - "tt2377396", - "tt1230478", - "tt0050598", - "tt0019838", - "tt2188723", - "tt7504496", - "tt0075244", - "tt2115388", - "tt1863160", - "tt0069257", - "tt1699140", - "tt0007338", - "tt0038160", - "tt0765447", - "tt2354513", - "tt0151933", - "tt0152216", - "tt0151014", - "tt0067989", - "tt0039645", - "tt1608776", - "tt2870808", - "tt1181935", - "tt0070679", - "tt0429589", - "tt1677730", - "tt0151081", - "tt1769363", - "tt0133412", - "tt9760256", - "tt0844948", - "tt0149660", - "tt0320441", - "tt0042286", - "tt0152235", - "tt0152220", - "tt8014482", - "tt5129682", - "tt2670882", - "tt1855401", - "tt0150571", - "tt0048673", - "tt2118702", - "tt0151228", - "tt0150977", - "tt0057033", - "tt0152374", - "tt0044188", - "tt0080486", - "tt1954900", - "tt0091190", - "tt0106551", - "tt0066075", - "tt0066105", - "tt0048393", - "tt0152263", - "tt6178388", - "tt0460732", - "tt0367813", - "tt0065481", - "tt0152032", - "tt0149625", - "tt0153943", - "tt0109162", - "tt0040202", - "tt0085470", - "tt0098051", - "tt1927152", - "tt0050307", - "tt3745058", - "tt0037800", - "tt8947034", - "tt0103129", - "tt0079271", - "tt0025919", - "tt8517704", - "tt8064392", - "tt6144524", - "tt7558912", - "tt7633666", - "tt3449040", - "tt0111700", - "tt3813404", - "tt0331314", - "tt0071517", - "tt0151775", - "tt1482104", - "tt7254920", - "tt1312953", - "tt0084955", - "tt0080641", - "tt0038988", - "tt0414472", - "tt0086646", - "tt0843843", - "tt0043592", - "tt0040338", - "tt0041498", - "tt0054757", - "tt0058672", - "tt0858419", - "tt4573516", - "tt0056575", - "tt0070077", - "tt0035899", - "tt0042652", - "tt0052585", - "tt0940657", - "tt2597768", - "tt1885265", - "tt6931170", - "tt0117237", - "tt6643972", - "tt0044413", - "tt0061584", - "tt0255274", - "tt1433207", - "tt0052374", - "tt0069222", - "tt0087042", - "tt0320763", - "tt0080724", - "tt0015977", - "tt0059817", - "tt0030063", - "tt0228943", - "tt1220213", - "tt2513864", - "tt0029686", - "tt0055862", - "tt7266800", - "tt0023293", - "tt0030523", - "tt8085790", - "tt0194523", - "tt0041510", - "tt1111833", - "tt0083891", - "tt0058246", - "tt0094793", - "tt0102820", - "tt0090559", - "tt0064807", - "tt0142804", - "tt0049916", - "tt0160210", - "tt0049934", - "tt0062366", - "tt0057146", - "tt0028030", - "tt0804492", - "tt0020523", - "tt0025911", - "tt0057450", - "tt2265257", - "tt0002816", - "tt0001865", - "tt0060914", - "tt0005149", - "tt1556690", - "tt1951239", - "tt0060438", - "tt0452945", - "tt0002506", - "tt8260858", - "tt0059105", - "tt6207878", - "tt0015039", - "tt0174228", - "tt2261319", - "tt0070858", - "tt5002444", - "tt0024894", - "tt0061577", - "tt0061698", - "tt5364010", - "tt0161216", - "tt0066098", - "tt8678108", - "tt4189646", - "tt7257948", - "tt6467274", - "tt0106335", - "tt0066739", - "tt0453207", - "tt0063121", - "tt0221719", - "tt0039677", - "tt2857160", - "tt5604902", - "tt8582254", - "tt9664168", - "tt0053804", - "tt3704854", - "tt7243462", - "tt2981768", - "tt7241484", - "tt0109493", - "tt0484444", - "tt1854506", - "tt0066319", - "tt2120743", - "tt0046247", - "tt0076584", - "tt0063979", - "tt5201934", - "tt5966604", - "tt6103318", - "tt0038499", - "tt3638444", - "tt3139682", - "tt0061391", - "tt0041967", - "tt3638644", - "tt1974420", - "tt0045920", - "tt0035896", - "tt4933238", - "tt2363481", - "tt3325098", - "tt4027504", - "tt3131050", - "tt0031505", - "tt6818874", - "tt0107178", - "tt0089200", - "tt4126438", - "tt0046511", - "tt1710417", - "tt2511428", - "tt4462082", - "tt0116075", - "tt1710396", - "tt7811942", - "tt3052652", - "tt9896916", - "tt3830420", - "tt0896811", - "tt8191502", - "tt4131658", - "tt7769716", - "tt4123650", - "tt5119160", - "tt2556936", - "tt0115645", - "tt0023551", - "tt7986672", - "tt6141886", - "tt2069797", - "tt0096969", - "tt5092484", - "tt4813254", - "tt5746054", - "tt0114594", - "tt0101983", - "tt4714568", - "tt0074906", - "tt1901040", - "tt0050356", - "tt0092115", - "tt0089087", - "tt0103130", - "tt0280380", - "tt0037415", - "tt2474024", - "tt2436682", - "tt1913166", - "tt0055257", - "tt0072951", - "tt0120029", - "tt0045883", - "tt0081207", - "tt0116118", - "tt0100142", - "tt0073092", - "tt0098194", - "tt0090930", - "tt1171222", - "tt0099277", - "tt1718924", - "tt1786751", - "tt0089013", - "tt0355954", - "tt1456060", - "tt0083739", - "tt1736150", - "tt0240772", - "tt0480516", - "tt0378947", - "tt2312890", - "tt3451956", - "tt0025833", - "tt1135525", - "tt0033021", - "tt5252674", - "tt0056194", - "tt1790867", - "tt0052618", - "tt0466845", - "tt4236310", - "tt0050815", - "tt1167319", - "tt0264796", - "tt0896036", - "tt0043069", - "tt0023814", - "tt8111636", - "tt1319712", - "tt0116736", - "tt0255441", - "tt1321862", - "tt0080752", - "tt0069895", - "tt0036670", - "tt0041263", - "tt0080117", - "tt6333000", - "tt0080461", - "tt7266936", - "tt3384938", - "tt2115295", - "tt0087921", - "tt3622120", - "tt8764762", - "tt0049291", - "tt0283897", - "tt0259484", - "tt2150369", - "tt0086631", - "tt0120667", - "tt0030522", - "tt5225338", - "tt2286990", - "tt0099697", - "tt1667307", - "tt0027657", - "tt0249677", - "tt0086205", - "tt0065051", - "tt0783598", - "tt0090315", - "tt0051383", - "tt0084652", - "tt3859304", - "tt0104511", - "tt1181614", - "tt0023238", - "tt1815708", - "tt1233219", - "tt0052151", - "tt0112625", - "tt0780548", - "tt0048342", - "tt0096380", - "tt0059903", - "tt0116502", - "tt5440730", - "tt0118541", - "tt4807408", - "tt0057193", - "tt0356721", - "tt0042332", - "tt0073387", - "tt1274293", - "tt0058947", - "tt0837563", - "tt2520306", - "tt1628841", - "tt0112384", - "tt0061578", - "tt0116629", - "tt7590334", - "tt0104694", - "tt0083184", - "tt0079429", - "tt0059578", - "tt10438648", - "tt2719752", - "tt0093793", - "tt0058461", - "tt0066831", - "tt6175764", - "tt0060196", - "tt8712750", - "tt0089346", - "tt0929860", - "tt2337981", - "tt0040366", - "tt0040536", - "tt0103923", - "tt1441940", - "tt3837196", - "tt1692190", - "tt0042451", - "tt0119142", - "tt1107319", - "tt2217859", - "tt6772804", - "tt4503598", - "tt0073636", - "tt0085271", - "tt0048445", - "tt10100664", - "tt3060492", - "tt3588852", - "tt1132285", - "tt1525890", - "tt2095605", - "tt1802197", - "tt0089901", - "tt1781058", - "tt0270707", - "tt0071910", - "tt0087747", - "tt2570858", - "tt2271563", - "tt0073694", - "tt0286322", - "tt1640484", - "tt0097044", - "tt0816520", - "tt0090660", - "tt2243389", - "tt0037865", - "tt0036027", - "tt8551868", - "tt7146372", - "tt0021885", - "tt6865690", - "tt4126476", - "tt0079988", - "tt9860860", - "tt2538778", - "tt2011271", - "tt3608930", - "tt10514532", - "tt7188002", - "tt5942864", - "tt1855175", - "tt7458872", - "tt0090319", - "tt9537532", - "tt4934870", - "tt6007614", - "tt6198058", - "tt7075594", - "tt0101453", - "tt0101786", - "tt0041298", - "tt4921370", - "tt0139358", - "tt0056059", - "tt0139670", - "tt0101821", - "tt0046313", - "tt5914350", - "tt0139624", - "tt7476946", - "tt0078872", - "tt0034401", - "tt0109198", - "tt0030404", - "tt0040866", - "tt1132449", - "tt0018578", - "tt0445396", - "tt0050330", - "tt0153033", - "tt0151375", - "tt0152575", - "tt0233732", - "tt0233704", - "tt0233703", - "tt0076054", - "tt0139612", - "tt0034424", - "tt0150469", - "tt0152554", - "tt0152255", - "tt0139148", - "tt0152048", - "tt0078492", - "tt0139191", - "tt4958596", - "tt0032723", - "tt0234814", - "tt0090163", - "tt0036644", - "tt0150444", - "tt1518812", - "tt1235448", - "tt0153712", - "tt0151693", - "tt3729920", - "tt0150241", - "tt0037563", - "tt0011742", - "tt0153478", - "tt0150044", - "tt4746506", - "tt7063210", - "tt3152602", - "tt0010962", - "tt7105944", - "tt7278824", - "tt3720788", - "tt0120728", - "tt0081748", - "tt0100594", - "tt0105699", - "tt1059836", - "tt0035405", - "tt2481480", - "tt0067893", - "tt0309912", - "tt0358349", - "tt0279493", - "tt3791216", - "tt3610746", - "tt0023027", - "tt7519174", - "tt2784936", - "tt0113321", - "tt0022158", - "tt0800003", - "tt0061122", - "tt6301452", - "tt0031762", - "tt9783778", - "tt5096928", - "tt10432620", - "tt0103845", - "tt6866224", - "tt6952960", - "tt5275828", - "tt5084204", - "tt0101793", - "tt0494225", - "tt5457582", - "tt7056906", - "tt0107147", - "tt1845866", - "tt4192652", - "tt4838534", - "tt0064843", - "tt0396688", - "tt0419815", - "tt0091786", - "tt8225174", - "tt0424823", - "tt0082464", - "tt1611180", - "tt10468872", - "tt3421614", - "tt0059043", - "tt0454084", - "tt0077655", - "tt3521134", - "tt0437232", - "tt3467412", - "tt0118771", - "tt4702752", - "tt0441007", - "tt0104033", - "tt2258285", - "tt1260502", - "tt0430576", - "tt0166943", - "tt0093209", - "tt1121977", - "tt0085478", - "tt0109842", - "tt0080391", - "tt0423169", - "tt0424993", - "tt0087056", - "tt0053137", - "tt0106341", - "tt1182921", - "tt0071524", - "tt0098097", - "tt0495596", - "tt0056412", - "tt0059885", - "tt3505950", - "tt0048977", - "tt1270835", - "tt0037515", - "tt1705952", - "tt0062407", - "tt2639344", - "tt2193265", - "tt1870419", - "tt4666726", - "tt2376218", - "tt0059825", - "tt1010271", - "tt0099160", - "tt2112096", - "tt10204316", - "tt0088414", - "tt0098663", - "tt5033290", - "tt7537434", - "tt1636817", - "tt0077474", - "tt0110823", - "tt0095863", - "tt0051525", - "tt0145893", - "tt0082474", - "tt1756799", - "tt1878841", - "tt0038057", - "tt0066740", - "tt2043933", - "tt0099204", - "tt1523483", - "tt1725986", - "tt0298744", - "tt0091538", - "tt0099180", - "tt0050658", - "tt1564777", - "tt0064418", - "tt0020640", - "tt0047811", - "tt5522310", - "tt6368508", - "tt8749146", - "tt0082622", - "tt0042994", - "tt2181885", - "tt0280653", - "tt4142364", - "tt1911662", - "tt0099484", - "tt0077369", - "tt0412798", - "tt3662066", - "tt0053172", - "tt0090670", - "tt7058612", - "tt7529650", - "tt1922685", - "tt0075760", - "tt0914797", - "tt3513498", - "tt0080009", - "tt0064603", - "tt0047136", - "tt1183374", - "tt1931602", - "tt0035093", - "tt0093075", - "tt3976144", - "tt5195412", - "tt1742683", - "tt0101969", - "tt0893412", - "tt3722070", - "tt3445702", - "tt1371155", - "tt0083806", - "tt0037441", - "tt8323104", - "tt0057877", - "tt5200368", - "tt8783146", - "tt4249580", - "tt0035575", - "tt10182822", - "tt10017680", - "tt0120724", - "tt0113690", - "tt4067062", - "tt1226240", - "tt0047834", - "tt0089424", - "tt7458762", - "tt0094631", - "tt0052948", - "tt7297156", - "tt2709962", - "tt0119225", - "tt6175078", - "tt0107282", - "tt1661199", - "tt6423998", - "tt8001400", - "tt9103622", - "tt0062376", - "tt6588838", - "tt5172404", - "tt0419946", - "tt0448075", - "tt3733778", - "tt0082517", - "tt0095243", - "tt3528666", - "tt1179891", - "tt0075213", - "tt1266027", - "tt0104549", - "tt3203616", - "tt4935334", - "tt2334841", - "tt0057372", - "tt1047540", - "tt5781798", - "tt2319580", - "tt0060955", - "tt2304771", - "tt0205873", - "tt0041866", - "tt7368186", - "tt0120701", - "tt0377062", - "tt1701990", - "tt0077405", - "tt0118055", - "tt2406658", - "tt0108556", - "tt0062824", - "tt0469021", - "tt0034248", - "tt0105386", - "tt0847879", - "tt8318348", - "tt10048556", - "tt0088855", - "tt0103743", - "tt1823067", - "tt1667150", - "tt0088135", - "tt0099850", - "tt0031886", - "tt0010559", - "tt0079766", - "tt0087852", - "tt0095396", - "tt0203672", - "tt0015016", - "tt0093305", - "tt0953981", - "tt0093185", - "tt0100232", - "tt3835080", - "tt1244659", - "tt0069137", - "tt2247476", - "tt0086950", - "tt0083624", - "tt0058869", - "tt0058349", - "tt7701096", - "tt0381971", - "tt0084807", - "tt1391034", - "tt0043137", - "tt0488870", - "tt0097457", - "tt9600932", - "tt2387469", - "tt6871634", - "tt0288906", - "tt0192731", - "tt0239655", - "tt0105378", - "tt0086373", - "tt2083931", - "tt8582458", - "tt3520418", - "tt9310460", - "tt0087892", - "tt3708886", - "tt0072730", - "tt1320291", - "tt0068768", - "tt0484877", - "tt0073705", - "tt2383068", - "tt0137291", - "tt0076740", - "tt4972062", - "tt1018818", - "tt0093431", - "tt5007760", - "tt0105813", - "tt0997047", - "tt3685490", - "tt4357288", - "tt2447750", - "tt0070334", - "tt5887566", - "tt0023775", - "tt0044519", - "tt0094908", - "tt0127557", - "tt0036855", - "tt10516984", - "tt6044414", - "tt0084788", - "tt0084920", - "tt10195288", - "tt0049248", - "tt0093418", - "tt0088765", - "tt0105211", - "tt0093596", - "tt0120703", - "tt0043660", - "tt0303297", - "tt1232162", - "tt0097722", - "tt0074149", - "tt0105629", - "tt2095649", - "tt0071249", - "tt0073202", - "tt0068315", - "tt0075345", - "tt0071486", - "tt0032484", - "tt6133806", - "tt0041546", - "tt0077355", - "tt1763264", - "tt7380420", - "tt0492912", - "tt0076451", - "tt1436568", - "tt0044837", - "tt0367232", - "tt1152268", - "tt0330181", - "tt0107668", - "tt0413466", - "tt4659490", - "tt0815230", - "tt0396190", - "tt1680114", - "tt1663207", - "tt0087365", - "tt7207158", - "tt3707106", - "tt0457319", - "tt0321961", - "tt0252649", - "tt0119208", - "tt0100107", - "tt0271020", - "tt0391908", - "tt0283015", - "tt0114095", - "tt0097965", - "tt0075223", - "tt2011159", - "tt1555064", - "tt0072926", - "tt0134983", - "tt1798243", - "tt0060397", - "tt0039302", - "tt0482629", - "tt0076257", - "tt3726704", - "tt0493949", - "tt7979492", - "tt0050086", - "tt3733774", - "tt1778924", - "tt2366608", - "tt1185393", - "tt3702652", - "tt4109096", - "tt0341611", - "tt0426501", - "tt0893331", - "tt2706120", - "tt1473179", - "tt3702088", - "tt0071588", - "tt0325214", - "tt10524262", - "tt0424114", - "tt0076788", - "tt0100301", - "tt0108281", - "tt0248845", - "tt4920130", - "tt0078351", - "tt0865957", - "tt1621780", - "tt0459425", - "tt2402091", - "tt0299172", - "tt4667094", - "tt1611840", - "tt1611907", - "tt0027752", - "tt3630276", - "tt0280672", - "tt0247199", - "tt3644730", - "tt0065215", - "tt0034587", - "tt3098654", - "tt1800677", - "tt1291125", - "tt0091375", - "tt0164114", - "tt1572168", - "tt1441951", - "tt0045897", - "tt2235779", - "tt10376958", - "tt0070948", - "tt4030600", - "tt0102943", - "tt0055277", - "tt2725962", - "tt1630036", - "tt2349144", - "tt0417782", - "tt1654523", - "tt0142192", - "tt0100260", - "tt0434124", - "tt0027996", - "tt2183034", - "tt0100212", - "tt0091886", - "tt2304953", - "tt0083833", - "tt0120186", - "tt4185862", - "tt0047849", - "tt1747958", - "tt0116531", - "tt0116704", - "tt0439238", - "tt0214555", - "tt0104897", - "tt1928330", - "tt0117965", - "tt4738626", - "tt3220900", - "tt0090182", - "tt10353560", - "tt2699466", - "tt3499542", - "tt0280438", - "tt10195614", - "tt0800241", - "tt0327643", - "tt2828022", - "tt0064338", - "tt1127177", - "tt0062741", - "tt0279781", - "tt0285728", - "tt3515632", - "tt5885926", - "tt3671052", - "tt0361620", - "tt0117011", - "tt0027800", - "tt0100911", - "tt0032258", - "tt1042424", - "tt0076070", - "tt0115632", - "tt0489281", - "tt0169858", - "tt1467280", - "tt0063665", - "tt0059076", - "tt0145653", - "tt4581576", - "tt4196450", - "tt1468846", - "tt2368553", - "tt0131704", - "tt0026912", - "tt0038991", - "tt0158622", - "tt0105226", - "tt0107473", - "tt1545660", - "tt0095270", - "tt0048356", - "tt0361089", - "tt0089017", - "tt0045891", - "tt7390044", - "tt2140559", - "tt1196204", - "tt0083798", - "tt0101566", - "tt0422774", - "tt3577624", - "tt0058708", - "tt0067848", - "tt8476314", - "tt7424930", - "tt5667650", - "tt0095647", - "tt0245429", - "tt10384404", - "tt8787116", - "tt0103783", - "tt0043012", - "tt0498567", - "tt2677722", - "tt0077892", - "tt8286894", - "tt2288155", - "tt0113442", - "tt0020842", - "tt0095629", - "tt0109498", - "tt0105869", - "tt6490394", - "tt0016028", - "tt2398249", - "tt0045555", - "tt6892400", - "tt2085930", - "tt0900387", - "tt1740047", - "tt0100685", - "tt0070290", - "tt0098141", - "tt0099165", - "tt0081554", - "tt1748207", - "tt0073631", - "tt0107711", - "tt0367093", - "tt0178737", - "tt1767382", - "tt0099726", - "tt0160399", - "tt1634121", - "tt1959332", - "tt0050669", - "tt0088889", - "tt0043671", - "tt6400166", - "tt0271263", - "tt0078902", - "tt2309961", - "tt0106881", - "tt2388637", - "tt9497146", - "tt0049552", - "tt8836988", - "tt0084335", - "tt7461200", - "tt0284034", - "tt6772946", - "tt0088729", - "tt5378092", - "tt0084658", - "tt0074599", - "tt0070716", - "tt0069031", - "tt0066811", - "tt3197802", - "tt0047878", - "tt0087130", - "tt2417970", - "tt0088683", - "tt0448090", - "tt10243660", - "tt0071577", - "tt0301976", - "tt0030993", - "tt0083190", - "tt2799166", - "tt0278500", - "tt1198156", - "tt5977276", - "tt0085701", - "tt0388182", - "tt0086993", - "tt0100135", - "tt2172985", - "tt0073440", - "tt3068194", - "tt0126388", - "tt0086320", - "tt0090021", - "tt2910274", - "tt0418773", - "tt0119115", - "tt0924129", - "tt3352390", - "tt0077523", - "tt0120654", - "tt0060522", - "tt0080377", - "tt0113501", - "tt0094715", - "tt0076670", - "tt0083943", - "tt0061617", - "tt7083870", - "tt6428170", - "tt10358740", - "tt0078908", - "tt6383494", - "tt0114720", - "tt3362670", - "tt1734493", - "tt0051207", - "tt0117420", - "tt0334541", - "tt0110657", - "tt0048281", - "tt0089869", - "tt0405676", - "tt0040525", - "tt0097647", - "tt0046816", - "tt0055018", - "tt3369806", - "tt2872462", - "tt3231054", - "tt0097940", - "tt0089560", - "tt0063135", - "tt4196848", - "tt0113419", - "tt2235108", - "tt0160184", - "tt0120533", - "tt1925431", - "tt0016953", - "tt0058586", - "tt6982794", - "tt0046876", - "tt6338912", - "tt3575954", - "tt1325593", - "tt0114857", - "tt0098319", - "tt3149038", - "tt4255304", - "tt0042041", - "tt0114682", - "tt3308620", - "tt8840882", - "tt1714210", - "tt0258068", - "tt1510938", - "tt0078966", - "tt0388980", - "tt0100419", - "tt1932718", - "tt2023690", - "tt0051036", - "tt2479800", - "tt0107501", - "tt0080319", - "tt0038559", - "tt0077413", - "tt0068762", - "tt0067128", - "tt0106770", - "tt0082869", - "tt0104466", - "tt0093378", - "tt0100140", - "tt1894476", - "tt1441912", - "tt3544082", - "tt2094018", - "tt6873778", - "tt0968264", - "tt2452254", - "tt0175755", - "tt0450340", - "tt4154664", - "tt2326612", - "tt0091954", - "tt1659343", - "tt0078718", - "tt0085811", - "tt0108162", - "tt0037382", - "tt0091828", - "tt0176269", - "tt3813310", - "tt1405365", - "tt0117039", - "tt0082089", - "tt0045810", - "tt0120483", - "tt0093493", - "tt0091499", - "tt1226681", - "tt0066011", - "tt0063518", - "tt3554164", - "tt3835674", - "tt1905041", - "tt4241904", - "tt2458952", - "tt0066765", - "tt0094602", - "tt0218817", - "tt5389736", - "tt2391950", - "tt4653808", - "tt5836432", - "tt7221072", - "tt2386502", - "tt0112527", - "tt7403570", - "tt0046187", - "tt0277296", - "tt6245644", - "tt6107404", - "tt0085244", - "tt1013752", - "tt0092494", - "tt0065724", - "tt0078723", - "tt0360009", - "tt0086491", - "tt1596343", - "tt0192614", - "tt0242445", - "tt0095444", - "tt0093818", - "tt0086216", - "tt1971352", - "tt1204340", - "tt0087995", - "tt2059171", - "tt0426459", - "tt0344854", - "tt0082509", - "tt3247714", - "tt0063374", - "tt0101745", - "tt0802948", - "tt1381404", - "tt0099763", - "tt2088003", - "tt1541160", - "tt0105121", - "tt3787590", - "tt1266029", - "tt0420293", - "tt3499096", - "tt0065988", - "tt0926129", - "tt0263757", - "tt1366365", - "tt0054387", - "tt1594562", - "tt0485851", - "tt0303933", - "tt1032815", - "tt0110167", - "tt0113041", - "tt0089003", - "tt2097307", - "tt0071402", - "tt2261331", - "tt0265298", - "tt2368619", - "tt6428676", - "tt0118636", - "tt3721936", - "tt0086927", - "tt0168786", - "tt2493450", - "tt1828968", - "tt6634646", - "tt7165594", - "tt3512282", - "tt1262981", - "tt4872098", - "tt1261978", - "tt0067093", - "tt0109520", - "tt4370926", - "tt2375779", - "tt3216380", - "tt0804555", - "tt1865567", - "tt3077214", - "tt0095253", - "tt1496422", - "tt0107034", - "tt0078446", - "tt0100477", - "tt0117589", - "tt0464196", - "tt0069947", - "tt0087597", - "tt0101764", - "tt0116242", - "tt0139462", - "tt0195945", - "tt1596345", - "tt0109642", - "tt1234654", - "tt0040506", - "tt0060666", - "tt4191580", - "tt6394244", - "tt0399327", - "tt6621408", - "tt0425571", - "tt5096246", - "tt8530978", - "tt0085382", - "tt4844636", - "tt0899138", - "tt0088758", - "tt2386922", - "tt8160864", - "tt6016744", - "tt8840224", - "tt5450040", - "tt0109830", - "tt7042862", - "tt10206188", - "tt0339147", - "tt7188868", - "tt9044128", - "tt6912580", - "tt6511932", - "tt1869682", - "tt3701862", - "tt7339584", - "tt3949658", - "tt5094192", - "tt8443704", - "tt9130552", - "tt0149624", - "tt5321814", - "tt8717008", - "tt7390536", - "tt3573354", - "tt9866284", - "tt5836246", - "tt4330370", - "tt6167014", - "tt5112424", - "tt8772926", - "tt0212985", - "tt0116745", - "tt6857112", - "tt10215424", - "tt4819544", - "tt3416742", - "tt4695098", - "tt10443324", - "tt0486583", - "tt0337692", - "tt0068555", - "tt0119314", - "tt0419294", - "tt0108238", - "tt0086637", - "tt0070510", - "tt4190530", - "tt8846072", - "tt4876096", - "tt0365929", - "tt0170691", - "tt3205376", - "tt0097027", - "tt0085750", - "tt8346446", - "tt0281322", - "tt1714203", - "tt3387542", - "tt1426329", - "tt1156466", - "tt0810001", - "tt4158096", - "tt0881891", - "tt0093300", - "tt4520364", - "tt6215446", - "tt10376844", - "tt0070707", - "tt6967644", - "tt0047879", - "tt0024055", - "tt0022021", - "tt0099300", - "tt0021092", - "tt0042648", - "tt10136902", - "tt0077189", - "tt2973516", - "tt0022569", - "tt2510998", - "tt0043625", - "tt0022149", - "tt0022243", - "tt0022046", - "tt0021374", - "tt0021377", - "tt0093491", - "tt1053810", - "tt1941705", - "tt3097204", - "tt0065126", - "tt1674784", - "tt0088172", - "tt2828996", - "tt0091149", - "tt0407265", - "tt0202470", - "tt8563452", - "tt1423995", - "tt1598828", - "tt0089457", - "tt0120032", - "tt0051459", - "tt0060390", - "tt0306685", - "tt2034031", - "tt0038109", - "tt0308055", - "tt0387514", - "tt0068327", - "tt0369226", - "tt0398913", - "tt0913951", - "tt0309377", - "tt0077538", - "tt0332580", - "tt2243537", - "tt0088794", - "tt0107076", - "tt0105585", - "tt0155975", - "tt0299213", - "tt0098384", - "tt0266465", - "tt4139124", - "tt0117247", - "tt0079588", - "tt0049366", - "tt0875034", - "tt0107616", - "tt1825157", - "tt1341188", - "tt3099498", - "tt10440380", - "tt0090142", - "tt0110950", - "tt0118789", - "tt0417217", - "tt1038072", - "tt0192122", - "tt0283652", - "tt9114472", - "tt1462769", - "tt1640459", - "tt0109068", - "tt0058621", - "tt6942194", - "tt8243286", - "tt2345737", - "tt0106226", - "tt0096183", - "tt0073240", - "tt0227984", - "tt0076853", - "tt1623757", - "tt8852538", - "tt2461150", - "tt0116126", - "tt0067594", - "tt0848557", - "tt2170299", - "tt1308729", - "tt3169706", - "tt1124037", - "tt0112950", - "tt2967224", - "tt0282163", - "tt0084434", - "tt0947802", - "tt1930421", - "tt2848222", - "tt0094957", - "tt0489318", - "tt0929618", - "tt4893328", - "tt2221484", - "tt0189047", - "tt3532544", - "tt0119171", - "tt1740784", - "tt0222666", - "tt2081213", - "tt0444723", - "tt0978670", - "tt2231253", - "tt0467004", - "tt4004084", - "tt0428390", - "tt0115680", - "tt0118652", - "tt0401711", - "tt0093692", - "tt0893509", - "tt0144528", - "tt0088933", - "tt0460435", - "tt0087015", - "tt7286908", - "tt0113443", - "tt4136084", - "tt0891527", - "tt0395630", - "tt2771372", - "tt0045877", - "tt0088000", - "tt0056576", - "tt1084950", - "tt0091541", - "tt1213648", - "tt1604560", - "tt6732748", - "tt0265651", - "tt6977218", - "tt4817466", - "tt4015500", - "tt6170262", - "tt6220752", - "tt2316479", - "tt0089338", - "tt0089907", - "tt0811138", - "tt7374948", - "tt0096463", - "tt0103060", - "tt1837709", - "tt0102536", - "tt0105151", - "tt0108308", - "tt0117631", - "tt4126340", - "tt0251114", - "tt0245686", - "tt0115956", - "tt2231554", - "tt0093260", - "tt1703199", - "tt0042546", - "tt0103939", - "tt0092493", - "tt1764183", - "tt0086837", - "tt0408345", - "tt0048607", - "tt0078792", - "tt0016654", - "tt0086197", - "tt0047479", - "tt0142453", - "tt0105265", - "tt9407156", - "tt1033492", - "tt0449089", - "tt0046885", - "tt7339826", - "tt5303106", - "tt0327247", - "tt0046036", - "tt0036868", - "tt0073659", - "tt0106387", - "tt0268040", - "tt4653272", - "tt0169951", - "tt0087781", - "tt0039311", - "tt0119918", - "tt0323642", - "tt0247427", - "tt0067800", - "tt1971325", - "tt2105044", - "tt0300969", - "tt0391304", - "tt0097123", - "tt0139414", - "tt2234003", - "tt8498324", - "tt0131857", - "tt0218922", - "tt1748227", - "tt3704538", - "tt0111149", - "tt0060176", - "tt0265029", - "tt0119349", - "tt0844479", - "tt0118972", - "tt0787474", - "tt1043726", - "tt0067302", - "tt0388125", - "tt0023969", - "tt2359024", - "tt0385307", - "tt8119680", - "tt6021482", - "tt0092636", - "tt0067023", - "tt1850457", - "tt1583420", - "tt0091419", - "tt0034786", - "tt0117887", - "tt1742334", - "tt0116683", - "tt0036931", - "tt0472160", - "tt1258972", - "tt0031951", - "tt0390022", - "tt6241270", - "tt0264395", - "tt0285492", - "tt0369436", - "tt0069762", - "tt0377713", - "tt0800308", - "tt0021884", - "tt2390361", - "tt8015080", - "tt8478602", - "tt2295722", - "tt3704700", - "tt1318517", - "tt7655524404", - "tt7250378", - "tt0462485", - "tt0092220", - "tt6469548", - "tt1680133", - "tt0113198", - "tt0208185", - "tt3350436", - "tt0826593", - "tt4824256", - "tt0087050", - "tt0206226", - "tt5338600", - "tt4049956", - "tt9204606", - "tt0349193", - "tt1529240", - "tt7767874", - "tt0051372", - "tt0093854", - "tt2665470", - "tt6506146", - "tt1143110", - "tt4689268", - "tt0092627", - "tt10331828", - "tt10303892", - "tt8155182", - "tt9239888", - "tt1554929", - "tt6975598", - "tt8890582", - "tt6024768", - "tt3496048", - "tt0300051", - "tt0119468", - "tt1591479", - "tt0206314", - "tt0145531", - "tt2039393", - "tt0120177", - "tt2377322", - "tt0084739", - "tt1034389", - "tt0094947", - "tt2085765", - "tt1343046", - "tt0131325", - "tt0097937", - "tt0111301", - "tt1226753", - "tt1602479", - "tt1401690", - "tt4235342", - "tt0139809", - "tt0866439", - "tt0113481", - "tt0119994", - "tt4513674", - "tt1991245", - "tt0075029", - "tt0986233", - "tt0092086", - "tt0105464", - "tt0070393", - "tt0116518", - "tt0103749", - "tt0891592", - "tt0101242", - "tt5833186", - "tt0211792", - "tt0350777", - "tt0242193", - "tt4290974", - "tt0299110", - "tt0082679", - "tt0282482", - "tt2837866", - "tt0185364", - "tt0072405", - "tt6523328", - "tt0120499", - "tt9382596", - "tt0075988", - "tt0083701", - "tt4327418", - "tt0096294", - "tt0085390", - "tt5952594", - "tt0040647", - "tt3576060", - "tt7052108", - "tt3589224", - "tt6472976", - "tt2234534", - "tt6450662", - "tt7054636", - "tt0118607", - "tt8010850", - "tt3514826", - "tt1312156", - "tt1360795", - "tt0056218", - "tt0139239", - "tt1236242", - "tt1756487", - "tt0116225", - "tt1075419", - "tt1054119", - "tt0085794", - "tt0077928", - "tt0272362", - "tt0090863", - "tt0851532", - "tt1491044", - "tt1517633", - "tt0115734", - "tt0975645", - "tt0092675", - "tt0113651", - "tt0067185", - "tt0105812", - "tt0093426", - "tt1173947", - "tt0781084", - "tt1912398", - "tt1270767", - "tt0884732", - "tt0244092", - "tt1528071", - "tt2387433", - "tt1726669", - "tt0051720", - "tt0107808", - "tt9081562", - "tt2870612", - "tt0164181", - "tt1082868", - "tt0120686", - "tt0070051", - "tt0100047", - "tt0971209", - "tt0264429", - "tt0305711", - "tt0491244", - "tt5461944", - "tt0143952", - "tt10377036", - "tt0120646", - "tt9577852", - "tt4002210", - "tt0113500", - "tt5932728", - "tt0119086", - "tt1220198", - "tt0086541", - "tt2501366", - "tt0048424", - "tt0049406", - "tt2179116", - "tt2370248", - "tt1625346", - "tt0038355", - "tt0043456", - "tt0961722", - "tt0132477", - "tt0113161", - "tt0117333", - "tt0089893", - "tt1781922", - "tt1605717", - "tt0087078", - "tt2002718", - "tt1418377", - "tt1056026", - "tt2102496", - "tt0411061", - "tt1600195", - "tt0094862", - "tt1235522", - "tt0377471", - "tt0303816", - "tt0028333", - "tt0112401", - "tt0457510", - "tt0090329", - "tt1456635", - "tt1853739", - "tt2230358", - "tt0099253", - "tt1385867", - "tt0103956", - "tt2980592", - "tt0289848", - "tt0154506", - "tt3280262", - "tt0383216", - "tt0144120", - "tt1020072", - "tt0396555", - "tt1172049", - "tt0098554", - "tt1396218", - "tt1034331", - "tt1322269", - "tt0086034", - "tt0070379", - "tt2357129", - "tt0086979", - "tt0208003", - "tt0072034", - "tt0015864", - "tt0382077", - "tt0270288", - "tt0118615", - "tt0119229", - "tt0090264", - "tt1161864", - "tt0071807", - "tt0070328", - "tt0071360", - "tt0086006", - "tt3063516", - "tt0112818", - "tt0062512", - "tt0479997", - "tt0097742", - "tt0126886", - "tt2431286", - "tt0364970", - "tt0066995", - "tt1142977", - "tt1226273", - "tt0357277", - "tt0174708", - "tt0026385", - "tt9428190", - "tt0174707", - "tt1622547", - "tt0044860", - "tt5968394", - "tt7771454", - "tt0078352", - "tt1327773", - "tt0376136", - "tt0072750", - "tt0058409", - "tt1839492", - "tt0054188", - "tt0068650", - "tt0078969", - "tt0060086", - "tt0063598", - "tt0031566", - "tt1007029", - "tt0044706", - "tt1800246", - "tt0120902", - "tt0780653", - "tt8912932", - "tt0475276", - "tt1408253", - "tt4034354", - "tt0095294", - "tt0113855", - "tt2503944", - "tt0118689", - "tt0064665", - "tt1114740", - "tt0419706", - "tt0093177", - "tt1438176", - "tt0113101", - "tt0256415", - "tt0044081", - "tt0457007", - "tt0499480", - "tt1319718", - "tt0426883", - "tt3205846", - "tt1425257", - "tt0405296", - "tt2474906", - "tt2957774", - "tt0116014", - "tt1611845", - "tt1551621", - "tt0423176", - "tt10452178", - "tt9445114", - "tt1694518", - "tt0036695", - "tt1773370", - "tt8006926", - "tt2969656", - "tt0068676", - "tt0028358", - "tt4034622", - "tt2294677", - "tt2347134", - "tt2599716", - "tt1314170", - "tt0408524", - "tt3070936", - "tt1845838", - "tt1964777", - "tt1723047", - "tt2369205", - "tt2852400", - "tt3144098", - "tt2326204", - "tt1843287", - "tt1718747", - "tt0161081", - "tt2175669", - "tt1924429", - "tt2157346", - "tt0263488", - "tt3117746", - "tt0040897", - "tt2197128", - "tt3414382", - "tt0117438", - "tt2644714", - "tt1307068", - "tt2404311", - "tt0112431", - "tt0365907", - "tt1911644", - "tt0070608", - "tt0109579", - "tt1956620", - "tt0032976", - "tt1179034", - "tt0452594", - "tt0790736", - "tt0325805", - "tt0251160", - "tt0033563", - "tt0765010", - "tt0034492", - "tt2024432", - "tt0184894", - "tt0259446", - "tt0032910", - "tt1524137", - "tt1790886", - "tt0043274", - "tt0257360", - "tt0100150", - "tt0450232", - "tt0427327", - "tt0044079", - "tt0322330", - "tt0429078", - "tt0046183", - "tt0120643", - "tt1298648", - "tt0071230", - "tt4172430", - "tt0079522", - "tt2592808", - "tt0103874", - "tt0475723", - "tt0228094", - "tt1890373", - "tt1193096", - "tt0058331", - "tt0058890", - "tt0069768", - "tt2990738", - "tt0913425", - "tt1534564", - "tt0390221", - "tt5224834", - "tt1160525", - "tt1054122", - "tt0090304", - "tt0118819", - "tt1104123", - "tt0365847", - "tt0318462", - "tt0456743", - "tt0250258", - "tt1351685", - "tt3759298", - "tt1027718", - "tt0106308", - "tt4247618", - "tt0417148", - "tt1764234", - "tt0433386", - "tt0081150", - "tt0060645", - "tt5163226", - "tt4503906", - "tt0424345", - "tt5014122", - "tt5889204", - "tt0990407", - "tt2101441", - "tt0190641", - "tt2371163", - "tt1922561", - "tt1398426", - "tt0228092", - "tt0410297", - "tt0472399", - "tt0242423", - "tt0120647", - "tt0095159", - "tt3086386", - "tt0215129", - "tt0272338", - "tt0100133", - "tt0087998", - "tt0472033", - "tt1100089", - "tt0391198", - "tt0805564", - "tt1935179", - "tt1915581", - "tt0041959", - "tt6301712", - "tt0021749", - "tt0094291", - "tt0389722", - "tt1139328", - "tt0301345", - "tt0070547", - "tt0036775", - "tt0050476", - "tt0346491", - "tt0159097", - "tt1231587", - "tt0452003", - "tt0061852", - "tt1528100", - "tt0283426", - "tt0938283", - "tt2549540", - "tt0051642", - "tt0074521", - "tt0120681", - "tt0075031", - "tt0062850", - "tt0073702", - "tt0063442", - "tt0065462", - "tt0341555", - "tt0056069", - "tt6040806", - "tt0055254", - "tt3002798", - "tt5673432", - "tt0055529", - "tt2318440", - "tt0203433", - "tt0081782", - "tt6892462", - "tt5781458", - "tt0453091", - "tt0058994", - "tt1517451", - "tt0077770", - "tt0156329", - "tt0053720", - "tt0072634", - "tt0070844", - "tt0181956", - "tt2008647", - "tt0986361", - "tt0204360", - "tt0053992", - "tt0055404", - "tt7218804", - "tt2209764", - "tt0079596", - "tt0363547", - "tt0352248", - "tt0241303", - "tt0339291", - "tt0086622", - "tt0010853", - "tt0100157", - "tt1655442", - "tt0027977", - "tt0363988", - "tt1623205", - "tt1284575", - "tt0388482", - "tt10289996", - "tt0914798", - "tt1111422", - "tt1124035", - "tt0117665", - "tt0037469", - "tt1815862", - "tt0043014", - "tt0276751", - "tt0089927", - "tt0029583", - "tt2053463", - "tt3330944", - "tt1701202", - "tt8385976", - "tt1160369", - "tt0327554", - "tt4599588", - "tt2379460", - "tt5562100", - "tt0092001", - "tt0102728", - "tt2388050", - "tt0100438", - "tt9678928", - "tt6612946", - "tt0462160", - "tt3416536", - "tt8693770", - "tt6292852", - "tt6704898", - "tt9556730", - "tt0165543", - "tt1650044", - "tt6408924", - "tt4061944", - "tt5862166", - "tt6360394", - "tt6905676", - "tt0098662", - "tt9139848", - "tt7611944", - "tt0165433", - "tt4982252", - "tt0234817", - "tt2107850", - "tt1125849", - "tt3377798", - "tt1587278", - "tt0082761", - "tt7844450", - "tt0034583", - "tt0031381", - "tt3068544", - "tt3400060", - "tt1799585", - "tt4586114", - "tt3983732", - "tt0196229", - "tt0119396", - "tt3907206", - "tt3484140", - "tt0449059", - "tt2024469", - "tt0425210", - "tt0489099", - "tt1608290", - "tt0066769", - "tt4498760", - "tt0055134", - "tt2004420", - "tt0290002", - "tt3719948", - "tt0091561", - "tt8516544", - "tt1231583", - "tt0068742", - "tt6473402", - "tt0274309", - "tt0486576", - "tt0116367", - "tt0071278", - "tt0105159", - "tt8194318", - "tt4433172", - "tt0056989", - "tt0066900", - "tt0071154", - "tt0065440", - "tt0055534", - "tt1063669", - "tt4484426", - "tt3240102", - "tt0071308", - "tt0075001", - "tt0455841", - "tt4661680", - "tt0066600", - "tt0134821", - "tt0073406", - "tt0154468", - "tt0440003", - "tt0055022", - "tt0093633", - "tt0080166", - "tt0117260", - "tt5167934", - "tt3403194", - "tt3827684", - "tt6940908", - "tt6902696", - "tt0079886", - "tt0097004", - "tt0083526", - "tt5901326", - "tt6846128", - "tt1315419", - "tt4663548", - "tt0056110", - "tt0083146", - "tt6628192", - "tt0042423", - "tt0090093", - "tt1728979", - "tt5538568", - "tt2027255", - "tt3453052", - "tt5810122", - "tt2484224", - "tt8307082", - "tt1978567", - "tt1652287", - "tt1386492", - "tt2990126", - "tt0077534", - "tt4337690", - "tt5281700", - "tt1722638", - "tt0071455", - "tt1340803", - "tt2324928", - "tt0051724", - "tt1740468", - "tt0127045", - "tt0062776", - "tt0120118", - "tt0077270", - "tt1029167", - "tt0105191", - "tt4335650", - "tt4978274", - "tt0065922", - "tt0113674", - "tt1291549", - "tt1178640", - "tt1465478", - "tt3758708", - "tt2710826", - "tt0068897", - "tt1640486", - "tt0099636", - "tt1715320", - "tt5120400", - "tt3397556", - "tt3562786", - "tt0087010", - "tt1289437", - "tt4411618", - "tt0044937", - "tt0109550", - "tt3277624", - "tt0048248", - "tt4653586", - "tt8148018", - "tt1874707", - "tt5497458", - "tt9149786", - "tt2024521", - "tt4638246", - "tt5881522", - "tt3129692", - "tt5618332", - "tt1086794", - "tt6237168", - "tt1776097", - "tt6969814", - "tt0342108", - "tt0217331", - "tt5358948", - "tt2187061", - "tt8025310", - "tt1176410", - "tt1780871", - "tt0119655", - "tt1225698", - "tt0186654", - "tt6095944", - "tt4060480", - "tt9557190", - "tt4225696", - "tt4270060", - "tt3888806", - "tt4416800", - "tt1717229", - "tt6944264", - "tt1735853", - "tt0104987", - "tt6013892", - "tt5525418", - "tt1038902", - "tt5478868", - "tt0225481", - "tt0125988", - "tt0085159", - "tt0180316", - "tt0273041", - "tt0103190", - "tt0047501", - "tt0297284", - "tt8452154", - "tt1393020", - "tt0103757", - "tt0186183", - "tt3759416", - "tt2118775", - "tt0212235", - "tt5195832", - "tt5089786", - "tt8774260", - "tt0315983", - "tt4366830", - "tt0081159", - "tt3169832", - "tt0492931", - "tt7687082", - "tt2147491", - "tt0256858", - "tt0392465", - "tt2171735", - "tt8343312", - "tt4796634", - "tt0929858", - "tt0118945", - "tt0323531", - "tt0086618", - "tt0057581", - "tt1870529", - "tt3603808", - "tt1937449", - "tt1148205", - "tt7200946", - "tt0415856", - "tt0049674", - "tt2548208", - "tt0480011", - "tt1839591", - "tt0097662", - "tt1319694", - "tt2011953", - "tt0102724", - "tt2027064", - "tt1296899", - "tt0078753", - "tt1196338", - "tt0937375", - "tt3776826", - "tt0092752", - "tt3305308", - "tt0102802", - "tt1551630", - "tt6113488", - "tt0073600", - "tt0465997", - "tt2957760", - "tt1247667", - "tt1509803", - "tt0088967", - "tt2624412", - "tt0062708", - "tt1462054", - "tt0089348", - "tt2933544", - "tt3687310", - "tt6386748", - "tt10160814", - "tt0862748", - "tt7587878", - "tt0060640", - "tt0062490", - "tt4267818", - "tt0061715", - "tt0120490", - "tt0224345", - "tt0059462", - "tt0061669", - "tt0098306", - "tt0074968", - "tt9547338", - "tt0075016", - "tt0056095", - "tt0054144", - "tt0053994", - "tt6319654", - "tt0026094", - "tt0033838", - "tt0028378", - "tt0068718", - "tt0487419", - "tt0073796", - "tt0047682", - "tt0114323", - "tt0765849", - "tt0283003", - "tt1772270", - "tt0057869", - "tt0049537", - "tt0102816", - "tt0027964", - "tt7459182", - "tt0029943", - "tt0020475", - "tt0030448", - "tt0029930", - "tt0050567", - "tt0081254", - "tt0091980", - "tt6368028", - "tt0072826", - "tt0073471", - "tt0077547", - "tt1982650", - "tt7765120", - "tt0040009", - "tt0097289", - "tt0082351", - "tt0094663", - "tt0110093", - "tt0091578", - "tt4270516", - "tt0019109", - "tt0276819", - "tt3314376", - "tt0047422", - "tt0068972", - "tt0402850", - "tt2082180", - "tt0074806", - "tt0109384", - "tt0055304", - "tt0117774", - "tt0063568", - "tt1092634", - "tt0021542", - "tt0060268", - "tt2717860", - "tt0064067", - "tt0161083", - "tt0047638", - "tt1368440", - "tt0065499", - "tt2055765", - "tt0080616", - "tt3474600", - "tt0134154", - "tt0995863", - "tt0070756", - "tt0787505", - "tt2967988", - "tt0093304", - "tt0103044", - "tt0075612", - "tt3474602", - "tt2718440", - "tt0107096", - "tt0926063", - "tt0065466", - "tt0069091", - "tt0071512", - "tt0090907", - "tt0079638", - "tt1153706", - "tt3774466", - "tt3303728", - "tt0088915", - "tt1445202", - "tt6182078", - "tt2292959", - "tt0108473", - "tt2911668", - "tt3289728", - "tt0339135", - "tt0057449", - "tt0110006", - "tt2091318", - "tt0369672", - "tt0102388", - "tt0104990", - "tt0063850", - "tt0066819", - "tt1715336", - "tt3299704", - "tt5143226", - "tt3275216", - "tt0094894", - "tt4943322", - "tt2581244", - "tt1620935", - "tt0264761", - "tt0072288", - "tt7922976", - "tt7364566", - "tt0101787", - "tt0810784", - "tt2473794", - "tt7419468", - "tt0067588", - "tt2401097", - "tt2639254", - "tt0102744", - "tt0159382", - "tt4383594", - "tt0062138", - "tt0116324", - "tt4208432", - "tt0765446", - "tt0079207", - "tt2084957", - "tt2218003", - "tt7731512", - "tt6562628", - "tt0352851", - "tt1032746", - "tt0067523", - "tt1535492", - "tt1851871", - "tt0119668", - "tt6493644", - "tt0226018", - "tt0237045", - "tt0100595", - "tt0070246", - "tt0061735", - "tt0095484", - "tt0069041", - "tt0054640", - "tt0073312", - "tt0075720", - "tt0107159", - "tt0069165", - "tt5227746", - "tt0099812", - "tt0075203", - "tt1554522", - "tt0289992", - "tt0112659", - "tt0078300", - "tt0077973", - "tt4824302", - "tt0278723", - "tt2652092", - "tt0105831", - "tt6063024", - "tt1160996", - "tt0367594", - "tt1464174", - "tt0114681", - "tt1181791", - "tt6211976", - "tt5311542", - "tt2244901", - "tt0105275", - "tt2091473", - "tt1441952", - "tt0091090", - "tt1314228", - "tt1932767", - "tt0329717", - "tt1486834", - "tt0228677", - "tt3544112", - "tt0089270", - "tt2404181", - "tt6388090", - "tt1783732", - "tt1196948", - "tt0358135", - "tt0087963", - "tt1117385", - "tt0435665", - "tt0421729", - "tt0329691", - "tt1294688", - "tt0081187", - "tt6391440", - "tt0055256", - "tt1920849", - "tt0328675", - "tt9675192", - "tt2313780", - "tt1414827", - "tt4768160", - "tt0121922", - "tt6091936", - "tt0060903", - "tt0022458", - "tt0038675", - "tt0105851", - "tt0061037", - "tt1404364", - "tt0063668", - "tt0064828", - "tt0074870", - "tt0067487", - "tt0040418", - "tt0068971", - "tt0108650", - "tt0059601", - "tt0060888", - "tt0439654", - "tt0076164", - "tt0071458", - "tt0096885", - "tt0086242", - "tt0165075", - "tt4660800", - "tt1156506", - "tt0435026", - "tt0475355", - "tt0079484", - "tt2904430", - "tt0083156", - "tt2063013", - "tt0067696", - "tt0104155", - "tt6147768", - "tt1662557", - "tt1077094", - "tt0882791", - "tt0485552", - "tt1098226", - "tt4619940", - "tt3108840", - "tt0417072", - "tt1322335", - "tt7282468", - "tt0366292", - "tt1646203", - "tt0296696", - "tt6857282", - "tt2139903", - "tt1373138", - "tt3550748", - "tt0072007", - "tt3145220", - "tt0073168", - "tt3812402", - "tt5034276", - "tt3312962", - "tt0348568", - "tt0065555", - "tt0064897", - "tt5876604", - "tt3025712", - "tt8129794", - "tt0160916", - "tt1948581", - "tt1305730", - "tt5136874", - "tt0041998", - "tt6184402", - "tt0087635", - "tt7867026", - "tt4975498", - "tt0094890", - "tt4830786", - "tt0072759", - "tt0057426", - "tt0067850", - "tt1773768", - "tt0063101", - "tt0089154", - "tt0124565", - "tt0092843", - "tt0848538", - "tt0073259", - "tt0075614", - "tt0029841", - "tt0046851", - "tt0046138", - "tt0058372", - "tt0163989", - "tt0050958", - "tt0244706", - "tt1772399", - "tt7547158", - "tt1189432", - "tt0074477", - "tt0029056", - "tt4475176", - "tt0221269", - "tt0036272", - "tt0064068", - "tt7778680", - "tt1148277", - "tt0097167", - "tt4694546", - "tt0205779", - "tt7001042", - "tt0416675", - "tt0085442", - "tt1016321", - "tt0052006", - "tt8679574", - "tt0070714", - "tt0079917", - "tt1727578", - "tt0120530", - "tt6752992", - "tt8106566", - "tt0103950", - "tt0062345", - "tt0047820", - "tt1123373", - "tt0054209", - "tt1617250", - "tt0069336", - "tt0082220", - "tt0061709", - "tt0054901", - "tt0051349", - "tt8739240", - "tt0048933", - "tt0087644", - "tt4975920", - "tt0045082", - "tt0066735", - "tt0049872", - "tt0093206", - "tt0090756", - "tt0063167", - "tt0082273", - "tt0072324", - "tt0124501", - "tt0250638", - "tt0074941", - "tt0080080", - "tt0119472", - "tt0073735", - "tt0073537", - "tt0105399", - "tt0064169", - "tt0089029", - "tt0045848", - "tt5462906", - "tt0050252", - "tt0074383", - "tt0065656", - "tt0062426", - "tt0081494", - "tt1853614", - "tt0079514", - "tt0077525", - "tt4006794", - "tt0053458", - "tt0056219", - "tt0056725", - "tt0076478", - "tt0082257", - "tt0061733", - "tt0078243", - "tt0021025", - "tt0057358", - "tt0063595", - "tt2423422", - "tt0057611", - "tt6888282", - "tt2639336", - "tt1242422", - "tt0055499", - "tt1388371", - "tt0052207", - "tt0092859", - "tt0054346", - "tt8206940", - "tt0928193", - "tt8535848", - "tt2740984", - "tt4933506", - "tt6087048", - "tt9606548", - "tt0114150", - "tt0040478", - "tt0464837", - "tt1311031", - "tt0050847", - "tt6462084", - "tt4109284", - "tt3096810", - "tt3033160", - "tt6301140", - "tt4765338", - "tt5164664", - "tt0484414", - "tt5258194", - "tt4379480", - "tt0079882", - "tt2259968", - "tt0294852", - "tt0113360", - "tt3120274", - "tt3268288", - "tt2527660", - "tt0792947", - "tt4985848", - "tt0110616", - "tt0077233", - "tt0207957", - "tt5700182", - "tt0252227", - "tt0022753", - "tt0057811", - "tt2245279", - "tt7493818", - "tt3486080", - "tt6236780", - "tt7068878", - "tt0106475", - "tt0056112", - "tt0037638", - "tt0043938", - "tt6241768", - "tt6574700", - "tt7912678", - "tt0055024", - "tt9490990", - "tt0254688", - "tt0405963", - "tt0059573", - "tt0848554", - "tt0058091", - "tt0084485", - "tt7935980", - "tt10335986", - "tt0061520", - "tt0197626", - "tt0041822", - "tt0093562", - "tt0054116", - "tt0043827", - "tt0433696", - "tt0061796", - "tt0107894", - "tt0093628", - "tt0078477", - "tt0088689", - "tt0058166", - "tt0032043", - "tt0041871", - "tt9080630", - "tt0244167", - "tt0074633", - "tt6300886", - "tt0045563", - "tt0079709", - "tt4228294", - "tt0037702", - "tt0054731", - "tt5548284", - "tt0052227", - "tt0175205", - "tt0072960", - "tt0057683", - "tt0062207", - "tt0063260", - "tt0072895", - "tt0058745", - "tt0043959", - "tt0051666", - "tt0034251", - "tt1176416", - "tt0055489", - "tt0049523", - "tt0058500", - "tt0046977", - "tt4450396", - "tt0097015", - "tt0082727", - "tt0059124", - "tt0238948", - "tt0228333", - "tt0067229", - "tt0051649", - "tt1708658", - "tt1477835", - "tt0068950", - "tt0021800", - "tt0051436", - "tt0087263", - "tt0026276", - "tt0065037", - "tt0065036", - "tt0040607", - "tt0065591", - "tt0021890", - "tt0069976", - "tt0061014", - "tt0079138", - "tt0059729", - "tt0170266", - "tt0047417", - "tt0045124", - "tt0039152", - "tt3529198", - "tt0043142", - "tt0337741", - "tt2908228", - "tt0058756", - "tt0067350", - "tt0086374", - "tt0080934", - "tt0051429", - "tt0051713", - "tt2171847", - "tt0032383", - "tt0025746", - "tt0102713", - "tt0022698", - "tt0084489", - "tt0043090", - "tt0061204", - "tt0023940", - "tt0057997", - "tt0073502", - "tt0051496", - "tt0120685", - "tt0050296", - "tt8254556", - "tt0058529", - "tt0055992", - "tt0074455", - "tt0064253", - "tt0064949", - "tt0060182", - "tt0089015", - "tt1015474", - "tt3741834", - "tt0024593", - "tt0064622", - "tt0071598", - "tt0068805", - "tt0064437", - "tt0058390", - "tt1773764", - "tt6864046", - "tt0053719", - "tt4917554", - "tt0072732", - "tt9021234", - "tt1701223", - "tt0024471", - "tt0069834", - "tt0066907", - "tt0151239", - "tt2380342", - "tt7069030", - "tt8920490", - "tt8262226", - "tt0431265", - "tt0162030", - "tt1754648", - "tt8065304", - "tt3365084", - "tt3564924", - "tt6912990", - "tt1531697", - "tt1718763", - "tt0160941", - "tt5975068", - "tt0420231", - "tt5812542", - "tt0146671", - "tt3602660", - "tt4910232", - "tt0050490", - "tt8497714", - "tt0397105", - "tt3804774", - "tt5728374", - "tt1392261", - "tt7946586", - "tt0218426", - "tt1447971", - "tt0105347", - "tt0062006", - "tt0104006", - "tt1999811", - "tt0055798", - "tt6562798", - "tt0069897", - "tt0089280", - "tt0045546", - "tt1699114", - "tt0076245", - "tt0106292", - "tt0051406", - "tt1525366", - "tt2486630", - "tt0066730", - "tt0112760", - "tt2828322", - "tt0978759", - "tt0064840", - "tt0363780", - "tt0084329", - "tt10368652", - "tt0421073", - "tt0048347", - "tt0313792", - "tt1043696", - "tt0022286", - "tt0074554", - "tt0032904", - "tt0324519", - "tt0057495", - "tt3307692", - "tt0035979", - "tt0074749", - "tt0063663", - "tt5001094", - "tt0028597", - "tt0065469", - "tt0057251", - "tt1103982", - "tt1512732", - "tt0277941", - "tt0072979", - "tt0204626", - "tt1186373", - "tt7412066", - "tt0465375", - "tt0032155", - "tt0053085", - "tt0969647", - "tt3710944", - "tt0023458", - "tt0071840", - "tt3152486", - "tt1398941", - "tt0063035", - "tt0068931", - "tt5275926", - "tt0455608", - "tt1683043", - "tt0166485", - "tt1869265", - "tt0060371", - "tt5957018", - "tt1975159", - "tt0071746", - "tt0024857", - "tt0084157", - "tt1174686", - "tt0053580", - "tt1977094", - "tt0398712", - "tt0087003", - "tt0091415", - "tt0308499", - "tt0074891", - "tt5815078", - "tt0984227", - "tt9081188", - "tt0365889", - "tt7772580", - "tt1384590", - "tt6231792", - "tt0380160", - "tt0061749", - "tt1937118", - "tt0462036", - "tt4083124", - "tt3538602", - "tt1174730", - "tt0064748", - "tt0099699", - "tt0095119", - "tt1235778", - "tt0082945", - "tt2396200", - "tt0055807", - "tt0028010", - "tt0299071", - "tt0100828", - "tt6360332", - "tt0095895", - "tt0255819", - "tt1914320", - "tt1225831", - "tt2376726", - "tt0168501", - "tt0277371", - "tt0076543", - "tt1368044", - "tt2626102", - "tt2279346", - "tt9169592", - "tt2302150", - "tt3559422", - "tt5375040", - "tt2048854", - "tt0074254", - "tt0071571", - "tt1667897", - "tt4712754", - "tt2531318", - "tt2504022", - "tt1056101", - "tt2284790", - "tt1249415", - "tt2954474", - "tt0439815", - "tt8917752", - "tt0119362", - "tt6098380", - "tt7422552", - "tt10377024", - "tt10136680", - "tt3602422", - "tt7042024", - "tt6157970", - "tt3800894", - "tt7870578", - "tt0374089", - "tt3882074", - "tt0051714", - "tt3922350", - "tt0093872", - "tt4425064", - "tt4135844", - "tt2072230", - "tt0062395", - "tt1596280", - "tt2486682", - "tt0065834", - "tt4701660", - "tt4294052", - "tt1566946", - "tt4074114", - "tt0059015", - "tt0024184", - "tt0128719", - "tt5147214", - "tt0053133", - "tt0427038", - "tt0073773", - "tt0089643", - "tt1403130", - "tt0083641", - "tt0077321", - "tt0070260", - "tt0080646", - "tt3296658", - "tt2668150", - "tt3201572", - "tt0096094", - "tt0048960", - "tt5037684", - "tt1385956", - "tt4960466", - "tt2771506", - "tt1069242", - "tt0074294", - "tt4965146", - "tt4145178", - "tt2050664", - "tt0068817", - "tt0316465", - "tt0112896", - "tt5457244", - "tt3282174", - "tt7224496", - "tt0143428", - "tt2287663", - "tt0071695", - "tt3526706", - "tt0068815", - "tt0119141", - "tt0108071", - "tt2981746", - "tt7052494", - "tt1199779", - "tt2361700", - "tt0096257", - "tt5888384", - "tt1683981", - "tt1277737", - "tt3953420", - "tt3230608", - "tt0096409", - "tt0218505", - "tt2611026", - "tt4964772", - "tt0479884", - "tt1954612", - "tt2445178", - "tt1464539", - "tt0044078", - "tt1405500", - "tt3828116", - "tt0020080", - "tt2414046", - "tt2486678", - "tt4137324", - "tt1305583", - "tt0119062", - "tt1385912", - "tt1477715", - "tt9376172", - "tt6234120", - "tt1846487", - "tt0116030", - "tt4764974", - "tt3188614", - "tt6523594", - "tt1838571", - "tt0107426", - "tt5213534", - "tt5037840", - "tt7291412", - "tt9267624", - "tt0069467", - "tt0322545", - "tt10108358", - "tt0142996", - "tt2822400", - "tt3079016", - "tt6981046", - "tt0233375", - "tt0790723", - "tt0016481", - "tt5598292", - "tt0067227", - "tt0050225", - "tt0289658", - "tt2898904", - "tt5952522", - "tt6534422", - "tt5982216", - "tt5117222", - "tt3823912", - "tt0115495", - "tt3810486", - "tt1571222", - "tt3170504", - "tt2340888", - "tt7006658", - "tt2375255", - "tt2834944", - "tt5174196", - "tt1928144", - "tt5755622", - "tt0977658", - "tt0940909", - "tt0238924", - "tt3062976", - "tt1787127", - "tt3918686", - "tt2409418", - "tt0077714", - "tt7090040", - "tt0116259", - "tt3155734", - "tt0079153", - "tt1396226", - "tt4386242", - "tt0378793", - "tt3312868", - "tt1691924", - "tt3030970", - "tt0828065", - "tt1326283", - "tt0051899", - "tt2463302", - "tt0107504", - "tt6857250", - "tt1807944", - "tt2715556", - "tt1014774", - "tt6237306", - "tt1684548", - "tt7558166", - "tt5090486", - "tt1727300", - "tt4082314", - "tt0093677", - "tt2349142", - "tt4981292", - "tt0096340", - "tt1813609", - "tt2109127", - "tt0102729", - "tt4465538", - "tt2504640", - "tt0321997", - "tt0068457", - "tt0051690", - "tt1592855", - "tt1027862", - "tt0309291", - "tt0414161", - "tt0119167", - "tt2125472", - "tt0327409", - "tt10079698", - "tt3885932", - "tt0151582", - "tt2536124", - "tt2354205", - "tt3072110", - "tt0101615", - "tt2494032", - "tt0062477", - "tt1884438", - "tt2364659", - "tt2608726", - "tt8547366", - "tt0068863", - "tt0085387", - "tt2554714", - "tt1988621", - "tt0862892", - "tt1839590", - "tt1780888", - "tt0482577", - "tt1745740", - "tt0489070", - "tt0056552", - "tt2503358", - "tt3138192", - "tt1003059", - "tt2302969", - "tt3640226", - "tt2622874", - "tt2290553", - "tt7241800", - "tt2167843", - "tt3981112", - "tt2900624", - "tt0329679", - "tt1087828", - "tt2396711", - "tt2830416", - "tt2675318", - "tt1499948", - "tt2290534", - "tt3311900", - "tt0072625", - "tt0102343", - "tt0034465", - "tt0098368", - "tt0051630", - "tt0066871", - "tt2781516", - "tt3254570", - "tt0496375", - "tt0106504", - "tt2401789", - "tt1723799", - "tt0082323", - "tt2090488", - "tt0094695", - "tt0116756", - "tt1833844", - "tt3339624", - "tt0087789", - "tt0089023", - "tt1931601", - "tt0061411", - "tt0086590", - "tt0095400", - "tt1536019", - "tt0226267", - "tt0245522", - "tt0184310", - "tt3718066", - "tt1890375", - "tt2027154", - "tt2070759", - "tt2427836", - "tt0093006", - "tt0168136", - "tt0495861", - "tt1723124", - "tt0084732", - "tt1995400", - "tt0068911", - "tt2446318", - "tt0090860", - "tt0057078", - "tt0052287", - "tt2343585", - "tt0067794", - "tt2119396", - "tt1454099", - "tt3744428", - "tt4046282", - "tt4021190", - "tt0091859", - "tt1645126", - "tt0282659", - "tt3644202", - "tt2946858", - "tt1665744", - "tt4313216", - "tt3551954", - "tt2366131", - "tt1161449", - "tt1711510", - "tt5210376", - "tt0051895", - "tt3511812", - "tt4768764", - "tt1318516", - "tt0092751", - "tt4135076", - "tt0036057", - "tt2279241", - "tt0064137", - "tt5665022", - "tt0088864", - "tt1218503", - "tt0097561", - "tt1014762", - "tt0182996", - "tt3138344", - "tt0078870", - "tt0067085", - "tt0322725", - "tt2571776", - "tt0043015", - "tt2378177", - "tt0066475", - "tt0071626", - "tt2091956", - "tt0429106", - "tt2983922", - "tt8426808", - "tt1314248", - "tt3072376", - "tt1240941", - "tt0060975", - "tt0430677", - "tt2576852", - "tt4110388", - "tt1647446", - "tt0052733", - "tt1984221", - "tt0057642", - "tt8875622", - "tt0167367", - "tt1239257", - "tt8426800", - "tt0102557", - "tt5859038", - "tt6597612", - "tt0402175", - "tt7616710", - "tt4179338", - "tt1483386", - "tt6652828", - "tt5929226", - "tt4299862", - "tt9366716", - "tt6025356", - "tt6085642", - "tt0762072", - "tt0054745", - "tt2009410", - "tt8267604", - "tt0083264", - "tt2125439", - "tt1446113", - "tt0075975", - "tt0119389", - "tt2415174", - "tt2527186", - "tt4255252", - "tt0309600", - "tt0396096", - "tt6096364", - "tt6095002", - "tt0338559", - "tt1194606", - "tt1622988", - "tt0098512", - "tt4272866", - "tt0284929", - "tt0095368", - "tt0102619", - "tt2547332", - "tt0353625", - "tt1000768", - "tt0106366", - "tt0983213", - "tt2446192", - "tt0048426", - "tt2073016", - "tt1831776", - "tt0102293", - "tt3361068", - "tt1734589", - "tt0089740", - "tt0239570", - "tt2112287", - "tt4105970", - "tt0043435", - "tt2722786", - "tt1375754", - "tt2750632", - "tt0050874", - "tt0067384", - "tt5116940", - "tt3748076", - "tt0066561", - "tt4935446", - "tt1476250", - "tt3186838", - "tt0077587", - "tt2101507", - "tt6451260", - "tt0499464", - "tt2404171", - "tt1598172", - "tt0367555", - "tt0026104", - "tt1373403", - "tt0080903", - "tt0032156", - "tt0131335", - "tt0186508", - "tt1025102", - "tt0071760", - "tt1206881", - "tt5371622", - "tt4270878", - "tt0042281", - "tt1308756", - "tt5712474", - "tt2872570", - "tt1792621", - "tt3913550", - "tt0085937", - "tt0338187", - "tt0060463", - "tt5881528", - "tt1312230", - "tt5981616", - "tt0413108", - "tt2062966", - "tt5503824", - "tt4936398", - "tt0202114", - "tt6876170", - "tt7407296", - "tt0049806", - "tt2044729", - "tt1630529", - "tt1315052", - "tt1534394", - "tt0453376", - "tt5351576", - "tt6299592", - "tt0848587", - "tt3340446", - "tt4117094", - "tt1047102", - "tt0075982", - "tt2625948", - "tt2131556", - "tt2785162", - "tt8381492", - "tt7297960", - "tt0073206", - "tt2258545", - "tt1379169", - "tt2471538", - "tt0050873", - "tt0095825", - "tt1212022", - "tt5748998", - "tt0071722", - "tt3901256", - "tt2334350", - "tt1190617", - "tt1928335", - "tt0236693", - "tt2182071", - "tt2466622", - "tt0091957", - "tt1877890", - "tt2081343", - "tt0858436", - "tt2073131", - "tt2151783", - "tt0020025", - "tt9046576", - "tt9670282", - "tt5900870", - "tt0327753", - "tt0110008", - "tt0064443", - "tt2452244", - "tt1687878", - "tt8743064", - "tt5530838", - "tt0120788", - "tt1512274", - "tt7594584", - "tt1702923", - "tt2395183", - "tt0115820", - "tt2296471", - "tt2197561", - "tt0339716", - "tt1686897", - "tt1998392", - "tt4773854", - "tt0080872", - "tt1580426", - "tt2338190", - "tt1572506", - "tt10171746", - "tt3088036", - "tt0066851", - "tt0140137", - "tt0071742", - "tt1158939", - "tt0070001", - "tt1924334", - "tt4059112", - "tt0046422", - "tt0097351", - "tt1698653", - "tt4911288", - "tt2242975", - "tt3727690", - "tt1129404", - "tt1702929", - "tt0315788", - "tt0272790", - "tt2362102", - "tt1305579", - "tt1621418", - "tt2281159", - "tt2290747", - "tt2238758", - "tt0068657", - "tt3799996", - "tt1331112", - "tt2027231", - "tt2071567", - "tt4274656", - "tt3578504", - "tt1592265", - "tt1498858", - "tt3503840", - "tt4539742", - "tt0061557", - "tt2385195", - "tt2936174", - "tt2419284", - "tt4463120", - "tt0374184", - "tt2178256", - "tt4011010", - "tt1588362", - "tt5227660", - "tt2276860", - "tt0899154", - "tt2570390", - "tt2079571", - "tt0071415", - "tt1762233", - "tt0073190", - "tt0206013", - "tt2468638", - "tt5238368", - "tt2296935", - "tt5618870", - "tt0073700", - "tt2040367", - "tt6090588", - "tt1428556", - "tt1591504", - "tt0035432", - "tt1232207", - "tt0117619", - "tt0097954", - "tt3560546", - "tt2346198", - "tt0091229", - "tt0093229", - "tt0307034", - "tt0082530", - "tt2963232", - "tt0814075", - "tt3611112", - "tt0156701", - "tt3978902", - "tt2873214", - "tt0084488", - "tt9032888", - "tt0044476", - "tt0034116", - "tt3013018", - "tt3324702", - "tt0973836", - "tt1525916", - "tt1941645", - "tt1143141", - "tt2505366", - "tt1730300", - "tt0449488", - "tt7317324", - "tt8172466", - "tt1934195", - "tt1726758", - "tt3429014", - "tt3326846", - "tt0070605", - "tt2265651", - "tt1594505", - "tt0239548", - "tt1073656", - "tt1684921", - "tt0332375", - "tt0431447", - "tt8426846", - "tt0428765", - "tt0808409", - "tt2194748", - "tt8426154", - "tt1879078", - "tt1748018", - "tt1414449", - "tt7972040", - "tt3448124", - "tt3214240", - "tt1247681", - "tt0814150", - "tt9306684", - "tt3181400", - "tt6862864", - "tt2246955", - "tt1543493", - "tt1381505", - "tt1760947", - "tt0259741", - "tt0047085", - "tt0083024", - "tt0129023", - "tt0043278", - "tt1029097", - "tt0101490", - "tt0844457", - "tt2122424", - "tt3380104", - "tt3486392", - "tt0860870", - "tt2391622", - "tt1172587", - "tt2170371", - "tt0431074", - "tt2923076", - "tt1961438", - "tt2091423", - "tt0078780", - "tt0069958", - "tt0088184", - "tt1485761", - "tt1377253", - "tt1730760", - "tt0061800", - "tt0799942", - "tt0107108", - "tt4788736", - "tt0291502", - "tt0111185", - "tt1883184", - "tt8742574", - "tt1982882", - "tt1236254", - "tt3924510", - "tt2641704", - "tt0078508", - "tt2622854", - "tt4708346", - "tt4511394", - "tt0038032", - "tt1885281", - "tt1787797", - "tt2345721", - "tt2888068", - "tt4104022", - "tt3097756", - "tt0032993", - "tt0089689", - "tt5963314", - "tt6328046", - "tt0145937", - "tt2901736", - "tt4968782", - "tt0093223", - "tt0077597", - "tt2048819", - "tt4075322", - "tt4534732", - "tt0105114", - "tt2747908", - "tt2404003", - "tt2488586", - "tt7469972", - "tt2006719", - "tt0083072", - "tt0074570", - "tt1270079", - "tt5024894", - "tt7233726", - "tt0367000", - "tt3721630", - "tt4773642", - "tt4205920", - "tt0346811", - "tt2966728", - "tt3717324", - "tt3867396", - "tt0093978", - "tt0078252", - "tt4943934", - "tt6157600", - "tt0039341", - "tt0137458", - "tt4411234", - "tt0055913", - "tt2124908", - "tt2593392", - "tt1781784", - "tt2393799", - "tt0088153", - "tt9128686", - "tt0098213", - "tt3162938", - "tt0085503", - "tt2506386", - "tt3663644", - "tt4527400", - "tt1313121", - "tt0054866", - "tt1379721", - "tt0079082", - "tt1405413", - "tt0102416", - "tt0128165", - "tt1454542", - "tt0064588", - "tt1181840", - "tt2626090", - "tt2149360", - "tt2914838", - "tt3181886", - "tt1648964", - "tt3295482", - "tt5305352", - "tt6547786", - "tt0076517", - "tt3184720", - "tt3405714", - "tt2846292", - "tt1243955", - "tt0051807", - "tt7471884", - "tt9880234", - "tt4919240", - "tt8315092", - "tt2570436", - "tt0070825", - "tt0357894", - "tt2056757", - "tt0056512", - "tt4943594", - "tt2245151", - "tt3148348", - "tt8334236", - "tt1027874", - "tt5216256", - "tt1042896", - "tt2073029", - "tt0107626", - "tt0073114", - "tt0258489", - "tt2166616", - "tt0171356", - "tt4163020", - "tt1742330", - "tt1353810", - "tt1905010", - "tt3521442", - "tt3374816", - "tt0064536", - "tt1401113", - "tt1674197", - "tt0809504", - "tt3453580", - "tt3317874", - "tt0085626", - "tt4337500", - "tt1470020", - "tt2242176", - "tt2517658", - "tt5042436", - "tt9228950", - "tt2547172", - "tt2622672", - "tt2257216", - "tt3304756", - "tt0025913", - "tt0093276", - "tt0085533", - "tt1231593", - "tt3969972", - "tt3610576", - "tt10207850", - "tt0270394", - "tt3242756", - "tt0085695", - "tt2531362", - "tt1071203", - "tt1516009", - "tt5218486", - "tt6006924", - "tt8289524", - "tt0071389", - "tt2565280", - "tt8614742", - "tt3166406", - "tt5269396", - "tt3676370", - "tt2439190", - "tt6755892", - "tt8387464", - "tt3317522", - "tt2481248", - "tt0041786", - "tt3730518", - "tt5273624", - "tt0263215", - "tt0120115", - "tt2321341", - "tt0105652", - "tt2166934", - "tt2513092", - "tt3433170", - "tt0082481", - "tt0104572", - "tt0311041", - "tt1719583", - "tt3898860", - "tt1340761", - "tt1323973", - "tt5481184", - "tt1159721", - "tt3461828", - "tt2368920", - "tt1837584", - "tt3460252", - "tt0098691", - "tt0103935", - "tt1199550", - "tt0099474", - "tt3085500", - "tt2366572", - "tt0083002", - "tt1723129", - "tt0069331", - "tt0104647", - "tt8986842", - "tt1718199", - "tt6461514", - "tt1585257", - "tt0387808", - "tt2272918", - "tt4951834", - "tt0100881", - "tt0790657", - "tt0109066", - "tt4613272", - "tt1941536", - "tt0074589", - "tt7676544", - "tt0068746", - "tt5882704", - "tt0079094", - "tt0074664", - "tt0104765", - "tt8865562", - "tt2151270", - "tt2322415", - "tt0094969", - "tt1799537", - "tt5719748", - "tt1103963", - "tt5758802", - "tt1595388", - "tt3054776", - "tt4892682", - "tt0187499", - "tt4319698", - "tt0430772", - "tt8985014", - "tt0119263", - "tt8906266", - "tt1890559", - "tt2210451", - "tt3788392", - "tt0048558", - "tt1757944", - "tt0465643", - "tt0455976", - "tt3801934", - "tt3175936", - "tt0095937", - "tt2320030", - "tt1071809", - "tt1634058", - "tt5142784", - "tt2908090", - "tt7473036", - "tt1740762", - "tt7441338", - "tt7316358", - "tt0076271", - "tt6096308", - "tt5139800", - "tt3140024", - "tt3765892", - "tt1045673", - "tt1822203", - "tt4360484", - "tt6164254", - "tt1345503", - "tt2113822", - "tt3385704", - "tt5241840", - "tt1152277", - "tt0068425", - "tt2294705", - "tt2981254", - "tt2402127", - "tt0822831", - "tt2366614", - "tt0887161", - "tt1852904", - "tt2832482", - "tt3696086", - "tt2150371", - "tt0138587", - "tt3672840", - "tt0094021", - "tt0080527", - "tt1356392", - "tt0440939", - "tt2350954", - "tt3121442", - "tt1482989", - "tt2765340", - "tt0248415", - "tt9824674", - "tt1523575", - "tt3099300", - "tt3177226", - "tt4060030", - "tt0111174", - "tt9377684", - "tt0106743", - "tt1185242", - "tt2338341", - "tt1349853", - "tt6234132", - "tt9331434", - "tt4535008", - "tt1710394", - "tt5130442", - "tt0118566", - "tt0099426", - "tt4027270", - "tt0101393", - "tt0427954", - "tt0038715", - "tt0071275", - "tt3197766", - "tt4096608", - "tt0389053", - "tt0080179", - "tt2909116", - "tt1653690", - "tt3037632", - "tt0785035", - "tt3125472", - "tt0101678", - "tt3466816", - "tt1124377", - "tt1925518", - "tt0049661", - "tt0368909", - "tt2386353", - "tt0376098", - "tt0134167", - "tt0107156", - "tt2776344", - "tt2363115", - "tt3469910", - "tt0840406", - "tt3449302", - "tt1496009", - "tt2007388", - "tt2256761", - "tt2016168", - "tt1732169", - "tt0047681", - "tt1525359", - "tt1988816", - "tt1320431", - "tt1716743", - "tt8574212", - "tt0072953", - "tt2120051", - "tt1028525", - "tt1801096", - "tt0201484", - "tt5641246", - "tt6054710", - "tt1629755", - "tt1242861", - "tt8155288", - "tt1365048", - "tt8328740", - "tt8169446", - "tt2372429", - "tt4295258", - "tt5667482", - "tt0062742", - "tt2655734", - "tt0820872", - "tt2950996", - "tt2360586", - "tt1587427", - "tt2097333", - "tt1297925", - "tt3697398", - "tt3484796", - "tt2839312", - "tt0051051", - "tt0102158", - "tt3007924", - "tt0293715", - "tt1762358", - "tt0839856", - "tt2188885", - "tt1869671", - "tt0065790", - "tt6185658", - "tt2182241", - "tt0061670", - "tt3703750", - "tt2523426", - "tt1513076", - "tt2257816", - "tt0057497", - "tt1220625", - "tt0849483", - "tt1393003", - "tt0069162", - "tt1521242", - "tt0054371", - "tt7976208", - "tt3038708", - "tt5756052", - "tt1843866", - "tt1809231", - "tt0411477", - "tt5914630", - "tt0476985", - "tt5475734", - "tt7278120", - "tt5912700", - "tt1266149", - "tt0094632", - "tt3498820", - "tt1537314", - "tt5031108", - "tt0069035", - "tt0458339", - "tt1987680", - "tt3695346", - "tt2166880", - "tt2039380", - "tt1857929", - "tt2558022", - "tt4700756", - "tt6050396", - "tt1886680", - "tt4693418", - "tt2218924", - "tt0055391", - "tt2356500", - "tt0031828", - "tt6231588", - "tt2581480", - "tt0096436", - "tt7754222", - "tt0099366", - "tt0070537", - "tt4182064", - "tt0033836", - "tt0073882", - "tt3137732", - "tt6448192", - "tt6131386", - "tt8531044", - "tt3248132", - "tt4820296", - "tt2941396", - "tt6572608", - "tt1764547", - "tt6158494", - "tt0077904", - "tt10149868", - "tt4432804", - "tt0028950", - "tt1770672", - "tt1529558", - "tt8403246", - "tt2128679", - "tt1662295", - "tt4504044", - "tt4363990", - "tt7634968", - "tt4145836", - "tt0790709", - "tt0099749", - "tt0070205", - "tt0061451", - "tt2406468", - "tt5594444", - "tt0078960", - "tt2446746", - "tt0057476", - "tt1648062", - "tt0074885", - "tt0043389", - "tt2532528", - "tt1900920", - "tt3220528", - "tt0068892", - "tt0091012", - "tt0447635", - "tt2267454", - "tt1103274", - "tt0934446", - "tt0068772", - "tt0084825", - "tt1351186", - "tt2393174", - "tt2352892", - "tt0079367", - "tt4527268", - "tt2632308", - "tt1754455", - "tt1698520", - "tt1581336", - "tt2071445", - "tt2385169", - "tt2235876", - "tt1023490", - "tt1844793", - "tt0047463", - "tt2379715", - "tt0088895", - "tt0072937", - "tt2441232", - "tt1610294", - "tt1409798", - "tt3361186", - "tt3733618", - "tt0364955", - "tt1433343", - "tt0066850", - "tt9657764", - "tt0382637", - "tt0975738", - "tt5880296", - "tt3752766", - "tt1212442", - "tt0018051", - "tt0037549", - "tt1518191", - "tt0092149", - "tt10260132", - "tt0041452", - "tt9056818", - "tt0108583", - "tt1678040", - "tt5151716", - "tt6315010", - "tt1615156", - "tt0029284", - "tt10050782", - "tt7095654", - "tt3202708", - "tt8466804", - "tt6955804", - "tt3396114", - "tt5110344", - "tt8194728", - "tt5170710", - "tt4558194", - "tt0088707", - "tt1865333", - "tt3562266", - "tt6397364", - "tt4067684", - "tt4587740", - "tt5123866", - "tt7069196", - "tt3894188", - "tt6294892", - "tt0342172", - "tt4180032", - "tt4480940", - "tt5675936", - "tt5814408", - "tt5574012", - "tt9173364", - "tt8860786", - "tt5853124", - "tt8713370", - "tt1619832", - "tt7010948", - "tt6215212", - "tt5724948", - "tt1477171", - "tt3399078", - "tt6245488", - "tt1235830", - "tt0080933", - "tt3915566", - "tt2118009", - "tt3655682", - "tt0388098", - "tt4887842", - "tt0451751", - "tt2336104", - "tt1602093", - "tt3144266", - "tt3421616", - "tt1646111", - "tt1674086", - "tt3420392", - "tt0084036", - "tt3557440", - "tt4622340", - "tt9174800", - "tt1891923", - "tt3043194", - "tt1980911", - "tt0057183", - "tt4980812", - "tt2326124", - "tt9144756", - "tt1566938", - "tt2071571", - "tt0110998", - "tt4906164", - "tt7549618", - "tt0116059", - "tt0266747", - "tt5372620", - "tt2957558", - "tt0037075", - "tt2106749", - "tt0059709", - "tt4423984", - "tt0049801", - "tt0048696", - "tt4176964", - "tt1117668", - "tt0097081", - "tt4452144", - "tt0078231", - "tt2273575", - "tt9673648", - "tt0072868", - "tt1374996", - "tt0319126", - "tt0780506", - "tt2375037", - "tt3262252", - "tt2689354", - "tt0837795", - "tt0116959", - "tt0221563", - "tt3097876", - "tt2147225", - "tt0903036", - "tt2525156", - "tt7877276", - "tt2273641", - "tt2380301", - "tt2181298", - "tt2571362", - "tt3026830", - "tt7906260", - "tt0100765", - "tt5038776", - "tt1640220", - "tt0188557", - "tt1887923", - "tt1305008", - "tt2015503", - "tt2188913", - "tt1510925", - "tt5096726", - "tt0086381", - "tt1422653", - "tt2459038", - "tt0197857", - "tt1634055", - "tt2175184", - "tt0079822", - "tt4738238", - "tt2791026", - "tt0034801", - "tt3623002", - "tt2784036", - "tt1235433", - "tt2914892", - "tt2345695", - "tt0090293", - "tt1328633", - "tt0972542", - "tt1479398", - "tt0361679", - "tt0066144", - "tt2063804", - "tt2179239", - "tt2396421", - "tt1446675", - "tt1508698", - "tt1740476", - "tt1536421", - "tt0089299", - "tt0080499", - "tt0087068", - "tt0082193", - "tt0444648", - "tt0092580", - "tt4700190", - "tt1702919", - "tt4045894", - "tt3252786", - "tt0071535", - "tt4141368", - "tt3430634", - "tt0065480", - "tt3913244", - "tt0100623", - "tt0049285", - "tt6131450", - "tt1744760", - "tt2354196", - "tt1239462", - "tt2891234", - "tt0062022", - "tt1237961", - "tt0075654", - "tt0264410", - "tt2141761", - "tt0047935", - "tt0068246", - "tt3293356", - "tt0834900", - "tt0049667", - "tt1243972", - "tt1825728", - "tt0045041", - "tt0046712", - "tt0100205", - "tt1698027", - "tt0081415", - "tt9667876", - "tt1661066", - "tt1678042", - "tt2474984", - "tt1975146", - "tt2916324", - "tt5065810", - "tt5220602", - "tt5356670", - "tt0058164", - "tt7085054", - "tt4586136", - "tt3794204", - "tt0096416", - "tt1595833", - "tt8299654", - "tt9694594", - "tt6946580", - "tt0110200", - "tt3798628", - "tt1429382", - "tt0077769", - "tt0057277", - "tt5475710", - "tt1707821", - "tt3558642", - "tt0119782", - "tt5502946", - "tt0401224", - "tt0053630", - "tt1743994", - "tt0057890", - "tt5898034", - "tt3824344", - "tt1753811", - "tt3652964", - "tt4779496", - "tt2395337", - "tt4401006", - "tt3791266", - "tt2178915", - "tt1977822", - "tt0073338", - "tt3398252", - "tt2751140", - "tt0082479", - "tt6536944", - "tt1361838", - "tt1420568", - "tt2121304", - "tt3565904", - "tt3611432", - "tt1987028", - "tt1068774", - "tt8526576", - "tt3402880", - "tt0047542", - "tt7133384", - "tt2431576", - "tt1663696", - "tt4760656", - "tt0026752", - "tt0086141", - "tt2101307", - "tt1784736", - "tt2920330", - "tt0976095", - "tt3226956", - "tt9024378", - "tt1663956", - "tt7688892", - "tt2462708", - "tt2046166", - "tt10144748", - "tt1192384", - "tt1349616", - "tt0278422", - "tt2303112", - "tt1819601", - "tt6379596", - "tt1744768", - "tt6244196", - "tt1704578", - "tt2303074", - "tt0104545", - "tt1031224", - "tt4096750", - "tt7957694", - "tt6429278", - "tt9033534", - "tt0097236", - "tt4296254", - "tt1608285", - "tt0120534", - "tt1142804", - "tt3038734", - "tt0924518", - "tt0068005", - "tt4257950", - "tt0116771", - "tt2024542", - "tt1772292", - "tt1156300", - "tt3133114", - "tt1159198", - "tt0073511", - "tt0081232", - "tt4117510", - "tt1465496", - "tt2401842", - "tt1623772", - "tt1626135", - "tt0345601", - "tt1697878", - "tt2241475", - "tt3407428", - "tt0067839", - "tt3527772", - "tt5581120", - "tt0110885", - "tt1527823", - "tt0840272", - "tt0069086", - "tt0117611", - "tt5304634", - "tt3565066", - "tt6690176", - "tt7275200", - "tt0215557", - "tt4699624", - "tt7275528", - "tt0166322", - "tt7399124", - "tt3149360", - "tt6543048", - "tt2100376", - "tt0404031", - "tt1335992", - "tt5609302", - "tt3849938", - "tt2580658", - "tt2515086", - "tt0095875", - "tt1176933", - "tt5434972", - "tt1591496", - "tt0068673", - "tt0076598", - "tt5617254", - "tt3207160", - "tt5896962", - "tt2415468", - "tt1043839", - "tt5769586", - "tt3132422", - "tt0045654", - "tt4076934", - "tt3231734", - "tt1486799", - "tt3504064", - "tt4020312", - "tt1385591", - "tt2516610", - "tt2645188", - "tt1353014", - "tt0030881", - "tt4379800", - "tt4908764", - "tt1343740", - "tt4280822", - "tt0366555", - "tt5112622", - "tt1785395", - "tt4379728", - "tt3170972", - "tt0129852", - "tt0907625", - "tt0101483", - "tt5127300", - "tt0056796", - "tt4018492", - "tt0114433", - "tt0359398", - "tt0069820", - "tt1849810", - "tt1864492", - "tt4443856", - "tt0265086", - "tt5555554", - "tt1462044", - "tt0068994", - "tt0066940", - "tt2676710", - "tt1251357", - "tt0091462", - "tt3569374", - "tt1756818", - "tt7390102", - "tt3387432", - "tt0069483", - "tt0094325", - "tt3054840", - "tt0074228", - "tt2108605", - "tt0071295", - "tt0236283", - "tt1444258", - "tt0485601", - "tt1822239", - "tt2254364", - "tt1227927", - "tt0051507", - "tt1905059", - "tt0071663", - "tt0062190", - "tt0067219", - "tt2087720", - "tt1050160", - "tt0142634", - "tt3073490", - "tt0060848", - "tt1874649", - "tt6580394", - "tt0457355", - "tt3700456", - "tt5445444", - "tt3352034", - "tt0421237", - "tt2940482", - "tt2798680", - "tt2133302", - "tt4417522", - "tt1715362", - "tt4840096", - "tt7477820", - "tt2503154", - "tt3973814", - "tt0047074", - "tt4444732", - "tt0063591", - "tt1336253", - "tt8879666", - "tt5246902", - "tt6556576", - "tt0071938", - "tt4530832", - "tt3501492", - "tt1845211", - "tt0071318", - "tt5190950", - "tt4287348", - "tt2243260", - "tt8232016", - "tt2002789", - "tt4959440", - "tt8128970", - "tt0052749", - "tt1411762", - "tt2385189", - "tt0478154", - "tt0106636", - "tt2171809", - "tt3921852", - "tt3312936", - "tt2395123", - "tt0240585", - "tt3061100", - "tt0104516", - "tt3369676", - "tt2040295", - "tt0096920", - "tt4015930", - "tt0086262", - "tt0089109", - "tt1400335", - "tt2095713", - "tt3470656", - "tt1858522", - "tt2065877", - "tt3402594", - "tt1042570", - "tt1460639", - "tt0052771", - "tt2425866", - "tt3892384", - "tt1692235", - "tt2948202", - "tt5280806", - "tt0059116", - "tt1131742", - "tt0047590", - "tt10050780", - "tt3950908", - "tt0063765", - "tt5157030", - "tt6473622", - "tt0076747", - "tt5779372", - "tt0084058", - "tt5096920", - "tt0102555", - "tt0090735", - "tt0091898", - "tt2312184", - "tt4926042", - "tt5344752", - "tt3446330", - "tt0964179", - "tt6491178", - "tt6820256", - "tt2723176", - "tt2390283", - "tt0081235", - "tt4242158", - "tt5525504", - "tt3911074", - "tt6769064", - "tt5303930", - "tt0043408", - "tt3594826", - "tt0338769", - "tt0047281", - "tt5474114", - "tt5500308", - "tt0053344", - "tt1829735", - "tt1343103", - "tt0046532", - "tt3469284", - "tt1478804", - "tt9876426", - "tt1861343", - "tt0075393", - "tt4209802", - "tt0061971", - "tt4215332", - "tt3036676", - "tt0473700", - "tt3160230", - "tt2302601", - "tt3917318", - "tt2364975", - "tt0078277", - "tt2418558", - "tt0054823", - "tt2076826", - "tt0069919", - "tt2205589", - "tt1663625", - "tt2866296", - "tt2014198", - "tt2078549", - "tt2306236", - "tt0048992", - "tt2081253", - "tt0281122", - "tt6235850", - "tt3213078", - "tt0045504", - "tt2057931", - "tt1296077", - "tt1604100", - "tt1323917", - "tt2402213", - "tt3377240", - "tt3959690", - "tt2634414", - "tt0088722", - "tt3592904", - "tt0065478", - "tt2306633", - "tt4610244", - "tt2645164", - "tt1197613", - "tt0042629", - "tt3508840", - "tt1389762", - "tt5941692", - "tt1144797", - "tt0099634", - "tt3169770", - "tt2240966", - "tt0082042", - "tt3864758", - "tt3614922", - "tt1129412", - "tt0047562", - "tt1669814", - "tt3181898", - "tt2376246", - "tt5679402", - "tt2543202", - "tt3654680", - "tt1493798", - "tt4289566", - "tt1784600", - "tt1458503", - "tt4293752", - "tt1729674", - "tt3456206", - "tt2175947", - "tt0075137", - "tt4410798", - "tt5725894", - "tt0965375", - "tt4633694", - "tt1710900", - "tt0051629", - "tt0083560", - "tt2735292", - "tt0494228", - "tt2828884", - "tt1825784", - "tt2228902", - "tt2401211", - "tt2946436", - "tt2016872", - "tt7900820", - "tt2326013", - "tt2209626", - "tt4211516", - "tt7575480", - "tt3397992", - "tt4457852", - "tt6892388", - "tt0090727", - "tt3130734", - "tt3996414", - "tt0092006", - "tt0104870", - "tt0096267", - "tt0075086", - "tt0075229", - "tt1869362", - "tt2179027", - "tt5606742", - "tt2938464", - "tt1916749", - "tt3852066", - "tt2247748", - "tt1032749", - "tt0097874", - "tt1753693", - "tt2377414", - "tt0052820", - "tt1721491", - "tt0969322", - "tt3116438", - "tt0067515", - "tt1705125", - "tt1800734", - "tt0410162", - "tt0902337", - "tt1666187", - "tt0081459", - "tt0046294", - "tt0069795", - "tt3526408", - "tt1565441", - "tt0496673", - "tt0104822", - "tt4145108", - "tt4310772", - "tt3792330", - "tt0056350", - "tt1305800", - "tt6610158", - "tt5199588", - "tt1325743", - "tt2676350", - "tt0104823", - "tt2977672", - "tt0111348", - "tt0043075", - "tt0100261", - "tt4483094", - "tt0047449", - "tt3963640", - "tt2149137", - "tt4368098", - "tt0069179", - "tt0080808", - "tt2184207", - "tt4179512", - "tt2070604", - "tt4655630", - "tt0105645", - "tt0053341", - "tt3919322", - "tt8135494", - "tt0488928", - "tt3560742", - "tt1545103", - "tt3946300", - "tt3789946", - "tt0252480", - "tt1355627", - "tt4817640", - "tt1616092", - "tt8426838", - "tt0273907", - "tt6095090", - "tt0867286", - "tt1791500", - "tt0087538", - "tt2075318", - "tt5742568", - "tt2736254", - "tt0085250", - "tt0088395", - "tt0829421", - "tt0347971", - "tt3099940", - "tt3099370", - "tt1913178", - "tt2389162", - "tt3922754", - "tt4122118", - "tt1213012", - "tt1796607", - "tt1523367", - "tt1728638", - "tt3557406", - "tt2151633", - "tt2246907", - "tt0115965", - "tt0069841", - "tt3111728", - "tt1605803", - "tt0066848", - "tt2853182", - "tt2195552", - "tt1219822", - "tt0090322", - "tt1536374", - "tt1867086", - "tt4285960", - "tt4418398", - "tt4185566", - "tt2456594", - "tt0091339", - "tt0111244", - "tt3602106", - "tt1921111", - "tt2321501", - "tt0047904", - "tt0079278", - "tt2094762", - "tt3204254", - "tt0783492", - "tt1298716", - "tt1345488", - "tt3163336", - "tt4196868", - "tt0080485", - "tt0076665", - "tt1442492", - "tt1808304", - "tt1708534", - "tt0080802", - "tt5582876", - "tt0062159", - "tt0080346", - "tt0831285", - "tt1332119", - "tt2386668", - "tt0460777", - "tt5214224", - "tt0846004", - "tt2672180", - "tt0382443", - "tt1792584", - "tt2387589", - "tt2486278", - "tt0289589", - "tt0051150", - "tt0251806", - "tt0104178", - "tt0079176", - "tt1887676", - "tt0098014", - "tt2076871", - "tt0031225", - "tt2172055", - "tt0316900", - "tt1877797", - "tt0052610", - "tt0923653", - "tt2909124", - "tt3288992", - "tt2066070", - "tt2392846", - "tt2351392", - "tt0056957", - "tt3703148", - "tt1540014", - "tt2718314", - "tt0046375", - "tt1866251", - "tt4077656", - "tt3401338", - "tt0095005", - "tt2574576", - "tt2222062", - "tt3263096", - "tt1070886", - "tt8583190", - "tt0121744", - "tt3341832", - "tt6428912", - "tt1866197", - "tt0423474", - "tt3465456", - "tt7137380", - "tt3552642", - "tt2488366", - "tt7220640", - "tt0835775", - "tt0097455", - "tt0081445", - "tt3353138", - "tt3830812", - "tt4216834", - "tt3636090", - "tt0063242", - "tt3579990", - "tt3878196", - "tt2640674", - "tt1185244", - "tt3560762", - "tt0103802", - "tt2387431", - "tt0050371", - "tt3751084", - "tt3246840", - "tt3865238", - "tt0087260", - "tt0061976", - "tt0062808", - "tt0081759", - "tt0892084", - "tt3504824", - "tt1641401", - "tt3469440", - "tt2290567", - "tt3511542", - "tt0058561", - "tt0069922", - "tt0068182", - "tt3919278", - "tt2529272", - "tt3820450", - "tt0125308", - "tt5237980", - "tt2341308", - "tt0098190", - "tt2246831", - "tt3420064", - "tt3414954", - "tt0082841", - "tt2578608", - "tt2645044", - "tt3444184", - "tt1390397", - "tt2427502", - "tt3251306", - "tt2717558", - "tt2992146", - "tt3951190", - "tt0452703", - "tt0100661", - "tt2165735", - "tt6704038", - "tt3922810", - "tt0092147", - "tt0077912", - "tt0445939", - "tt6268536", - "tt4967094", - "tt1490726", - "tt1754912", - "tt4191486", - "tt0086884", - "tt1082599", - "tt0096246", - "tt4313982", - "tt0119288", - "tt5069110", - "tt4418152", - "tt6417256", - "tt7650198", - "tt0071464", - "tt4094144", - "tt2188907", - "tt2147459", - "tt5611404", - "tt1567227", - "tt4897822", - "tt1308169", - "tt1839426", - "tt3709552", - "tt0446027", - "tt2072979", - "tt0127282", - "tt2624220", - "tt3549656", - "tt0042208", - "tt5339418", - "tt5161658", - "tt4268054", - "tt0978800", - "tt6824456", - "tt0380687", - "tt0275434", - "tt1925466", - "tt0089504", - "tt2363309", - "tt1669268", - "tt2818654", - "tt4621016", - "tt1821617", - "tt3477732", - "tt2375278", - "tt0376196", - "tt1545106", - "tt0040872", - "tt6440916", - "tt0189764", - "tt0070061", - "tt2328490", - "tt2085752", - "tt1562918", - "tt1764636", - "tt0056732", - "tt0064881", - "tt3626440", - "tt0053976", - "tt0093674", - "tt0061049", - "tt3305844", - "tt0061780", - "tt0202483", - "tt1196618", - "tt0073363", - "tt0056141", - "tt0053570", - "tt0055151", - "tt0066904", - "tt0046435", - "tt0294909", - "tt3218094", - "tt3731196", - "tt0119196", - "tt1196134", - "tt0090928", - "tt0097456", - "tt0280486", - "tt0061132", - "tt2623946", - "tt0117089", - "tt1830402", - "tt2175675", - "tt3159412", - "tt0068640", - "tt0083976", - "tt1282147", - "tt0961088", - "tt0067030", - "tt0064111", - "tt1823120", - "tt2926810", - "tt0242508", - "tt6290798", - "tt0441627", - "tt2043971", - "tt0064819", - "tt3950078", - "tt2263942", - "tt2259306", - "tt1935896", - "tt1714828", - "tt1847541", - "tt1596753", - "tt2072220", - "tt1205558", - "tt0063141", - "tt0057286", - "tt1964773", - "tt1837613", - "tt9876408", - "tt3341072", - "tt3740242", - "tt2310792", - "tt3259968", - "tt0059282", - "tt1555110", - "tt0119258", - "tt0089539", - "tt0093550", - "tt1603489", - "tt2115325", - "tt0093146", - "tt2375597", - "tt0031968", - "tt3763790", - "tt0013951", - "tt1284485", - "tt1647477", - "tt2421416", - "tt0808261", - "tt0082968", - "tt0040308", - "tt0091603", - "tt2796678", - "tt0928364", - "tt4422796", - "tt0096402", - "tt3148978", - "tt2332579", - "tt0388139", - "tt7033498", - "tt6902510", - "tt4246854", - "tt2112293", - "tt0088979", - "tt0091848", - "tt0097364", - "tt0068661", - "tt0029992", - "tt3832160", - "tt0037991", - "tt1174739", - "tt0493407", - "tt0090350", - "tt0325965", - "tt4572820", - "tt2193167", - "tt0067919", - "tt3231390", - "tt0157894", - "tt0043511", - "tt0077138", - "tt4858474", - "tt1462900", - "tt4086032", - "tt5992138", - "tt6107412", - "tt0083922", - "tt0108633", - "tt0045061", - "tt0083908", - "tt0048341", - "tt2004211", - "tt0095158", - "tt0087472", - "tt0042851", - "tt0368975", - "tt0072239", - "tt2356464", - "tt3210686", - "tt5717960", - "tt1703125", - "tt3010660", - "tt5861630", - "tt1152403", - "tt0829424", - "tt0070634", - "tt1664873", - "tt2151915", - "tt0055805", - "tt1535098", - "tt2904798", - "tt0426556", - "tt1943710", - "tt5311972", - "tt2007430", - "tt3505800", - "tt2421910", - "tt4897156", - "tt1984116", - "tt0090015", - "tt4763340", - "tt5533664", - "tt0109508", - "tt6099400", - "tt0093991", - "tt3568380", - "tt0060491", - "tt0127759", - "tt0105470", - "tt0203940", - "tt0416481", - "tt0095334", - "tt2386175", - "tt2207484", - "tt1718714", - "tt8531560", - "tt0056945", - "tt4773438", - "tt5050328", - "tt2065945", - "tt2876428", - "tt0060545", - "tt0068883", - "tt0051093", - "tt3119416", - "tt3356682", - "tt0051819", - "tt2287214", - "tt4721404", - "tt0374546", - "tt0057400", - "tt4687848", - "tt0350184", - "tt2245171", - "tt1493815", - "tt0065820", - "tt3518012", - "tt0498361", - "tt0070270", - "tt1734429", - "tt0074235", - "tt0060529", - "tt1118519", - "tt1506459", - "tt0070438", - "tt2521404", - "tt3575258", - "tt2415458", - "tt0048158", - "tt0069687", - "tt2663744", - "tt0039745", - "tt1701218", - "tt1928337", - "tt5478700", - "tt4650624", - "tt1211353", - "tt4827558", - "tt3453772", - "tt0083801", - "tt0033873", - "tt9271164", - "tt0161849", - "tt1024746", - "tt2112210", - "tt9005662", - "tt0083185", - "tt0046714", - "tt3912672", - "tt0090774", - "tt0049793", - "tt2320388", - "tt0065482", - "tt0045112", - "tt4827290", - "tt1298643", - "tt0047919", - "tt0067757", - "tt1285217", - "tt2854876", - "tt0111797", - "tt0069414", - "tt4742670", - "tt0043265", - "tt0048254", - "tt0044103", - "tt1064801", - "tt1764355", - "tt0043292", - "tt2300913", - "tt2923936", - "tt0064451", - "tt2191082", - "tt0195234", - "tt0045758", - "tt3386928", - "tt5797164", - "tt10147546", - "tt0048554", - "tt2291284", - "tt0100728", - "tt2318268", - "tt0046766", - "tt5192278", - "tt1828124", - "tt3341084", - "tt0037913", - "tt4945466", - "tt0049646", - "tt2341971", - "tt0067084", - "tt0051947", - "tt0032599", - "tt1949106", - "tt0045251", - "tt0098645", - "tt0416881", - "tt0053146", - "tt0047876", - "tt0093970", - "tt0047119", - "tt0047094", - "tt7816392", - "tt2966760", - "tt1946177", - "tt0463381", - "tt1949546", - "tt0022879", - "tt0049967", - "tt9368628", - "tt1929449", - "tt0939684", - "tt0038477", - "tt1922544", - "tt1344659", - "tt0404977", - "tt0033712", - "tt9810480", - "tt0040806", - "tt8075260", - "tt1995373", - "tt0045283", - "tt1714917", - "tt1417592", - "tt0064405", - "tt0041958", - "tt0039750", - "tt1947969", - "tt0080479", - "tt1942972", - "tt4802214", - "tt0876563", - "tt1943035", - "tt4785440", - "tt0068816", - "tt0037367", - "tt0038409", - "tt0226874", - "tt0041239", - "tt1946148", - "tt0040257", - "tt0041968", - "tt0226873", - "tt0038396", - "tt0038873", - "tt1986953", - "tt0038392", - "tt2700114", - "tt0019421", - "tt4819498", - "tt1948521", - "tt0047958", - "tt0041787", - "tt0015624", - "tt5954284", - "tt0036824", - "tt0037691", - "tt4935282", - "tt3379814", - "tt5843990", - "tt0015400", - "tt1073240", - "tt0068408", - "tt0037756", - "tt0034891", - "tt0040737", - "tt0039266", - "tt9283056", - "tt1571247", - "tt0042039", - "tt0038468", - "tt2670016", - "tt2227830", - "tt0033405", - "tt1643222", - "tt0038363", - "tt0041996", - "tt0113987", - "tt0039834", - "tt6933206", - "tt2345525", - "tt6616364", - "tt0018192", - "tt3719416", - "tt0035169", - "tt3020226", - "tt0040416", - "tt1510983", - "tt3591944", - "tt0381940", - "tt1510985", - "tt0040946", - "tt1691452", - "tt0034012", - "tt9251614", - "tt0040092", - "tt0038733", - "tt0039208", - "tt0039768", - "tt4019426", - "tt0041841", - "tt0039478", - "tt4038966", - "tt0035966", - "tt2391073", - "tt1290475", - "tt1568921", - "tt4519400", - "tt5891150", - "tt4820418", - "tt0072867", - "tt0035916", - "tt6485304", - "tt0039404", - "tt0055871", - "tt2233492", - "tt0034522", - "tt0034091", - "tt0032455", - "tt0047677", - "tt2677894", - "tt2204340", - "tt2275499", - "tt0040160", - "tt1801063", - "tt1859607", - "tt0040221", - "tt0041094", - "tt2878846", - "tt0156887", - "tt0031359", - "tt9423984", - "tt0040614", - "tt2091229", - "tt6479534", - "tt0045828", - "tt7913172", - "tt0090209", - "tt0036969", - "tt6054290", - "tt0038116", - "tt0047033", - "tt0045911", - "tt2903076", - "tt8560130", - "tt2388759", - "tt0073756", - "tt4882930", - "tt7938092", - "tt2126347", - "tt0073755", - "tt0041587", - "tt0073623", - "tt0422779", - "tt4439342", - "tt1366409", - "tt0475860", - "tt1232775", - "tt0095060", - "tt4694594", - "tt5866732", - "tt0756690", - "tt7562564", - "tt5468016", - "tt1705786", - "tt0065210", - "tt5468018", - "tt6241872", - "tt0218553", - "tt5143704", - "tt0072253", - "tt0050100", - "tt0134928", - "tt10025732", - "tt0094794", - "tt0085473", - "tt0264935", - "tt0086345", - "tt3228088", - "tt0065032", - "tt1470022", - "tt8290698", - "tt0049639", - "tt0060865", - "tt0385846", - "tt3323638", - "tt3640272", - "tt4608574", - "tt1047544", - "tt0088818", - "tt0810817", - "tt1558576", - "tt3855546", - "tt2306836", - "tt0091507", - "tt1156447", - "tt0970529", - "tt0081485", - "tt1137455", - "tt3025994", - "tt0047370", - "tt5574372", - "tt2740538", - "tt1571234", - "tt1596565", - "tt0054271", - "tt1728973", - "tt2364006", - "tt0101497", - "tt4932244", - "tt1016024", - "tt0077450", - "tt0071194", - "tt1910615", - "tt1820400", - "tt1584943", - "tt9481862", - "tt0066952", - "tt0069318", - "tt0097971", - "tt0067671", - "tt1582198", - "tt1210071", - "tt1719068", - "tt9014006", - "tt3108584", - "tt0079580", - "tt4333368", - "tt0065981", - "tt4460854", - "tt0071268", - "tt2414212", - "tt0108277", - "tt1854513", - "tt6851966", - "tt0050470", - "tt3398788", - "tt0845463", - "tt2452470", - "tt7222072", - "tt1543807", - "tt1495776", - "tt9914350", - "tt2898306", - "tt1969062", - "tt0076417", - "tt1572502", - "tt2306342", - "tt1690540", - "tt3585004", - "tt1832516", - "tt1772262", - "tt3139212", - "tt1890455", - "tt1714176", - "tt1535472", - "tt0120224", - "tt1995477", - "tt1238302", - "tt3619102", - "tt0043079", - "tt2243621", - "tt1646212", - "tt1667416", - "tt0069530", - "tt1368870", - "tt3096712", - "tt1582213", - "tt3155654", - "tt1499220", - "tt0035489", - "tt3355510", - "tt1296172", - "tt1656171", - "tt1941627", - "tt1830495", - "tt5481984", - "tt1286800", - "tt3009070", - "tt2463154", - "tt0892094", - "tt0403848", - "tt0056526", - "tt0066258", - "tt6236504", - "tt1786742", - "tt6948600", - "tt5770414", - "tt4299300", - "tt0347246", - "tt4572700", - "tt4503324", - "tt0113568", - "tt1492728", - "tt2145540", - "tt7339930", - "tt2320924", - "tt1622991", - "tt9434772", - "tt1848904", - "tt6164854", - "tt0398033", - "tt1847548", - "tt1475135", - "tt0306011", - "tt2690160", - "tt0084704", - "tt0079027", - "tt0402904", - "tt0343531", - "tt0092850", - "tt0089034", - "tt0105526", - "tt0050085", - "tt0169620", - "tt0040652", - "tt0071788", - "tt3432552", - "tt0043288", - "tt1460643", - "tt2132374", - "tt5143700", - "tt0181012", - "tt0062218", - "tt2972058", - "tt0038854", - "tt0079128", - "tt1640116", - "tt0087127", - "tt0122070", - "tt1535608", - "tt0111216", - "tt0089199", - "tt0086340", - "tt0113982", - "tt1946310", - "tt1577883", - "tt0348121", - "tt0080842", - "tt0046026", - "tt2094146", - "tt0066050", - "tt4815204", - "tt0409999", - "tt0441041", - "tt1757831", - "tt0085224", - "tt1810710", - "tt0061696", - "tt4065552", - "tt1468703", - "tt0094625", - "tt1844643", - "tt1947998", - "tt5886046", - "tt0099384", - "tt4704918", - "tt0094929", - "tt0078764", - "tt0071259", - "tt2297108", - "tt2564978", - "tt1261414", - "tt8752474", - "tt5377654", - "tt1824904", - "tt6628394", - "tt4083052", - "tt0067204", - "tt2486490", - "tt1727824", - "tt4883336", - "tt1942798", - "tt9740572", - "tt0070696", - "tt3130560", - "tt5375434", - "tt3417526", - "tt9811870", - "tt5850588", - "tt6519020", - "tt0050997", - "tt6400280", - "tt8529186", - "tt9618280", - "tt8434380", - "tt1337682", - "tt9279172", - "tt1054564", - "tt8201170", - "tt3480446", - "tt8306022", - "tt3699702", - "tt0822389", - "tt1911600", - "tt2091327", - "tt0103303", - "tt0083070", - "tt0100339", - "tt0228891", - "tt0330152", - "tt0770814", - "tt0456912", - "tt1977001", - "tt1742682", - "tt0070653", - "tt1913042", - "tt1185838", - "tt0054290", - "tt1688704", - "tt1641388", - "tt1409734", - "tt3139756", - "tt2509298", - "tt0124770", - "tt2113681", - "tt1935104", - "tt4132190", - "tt1096997", - "tt1189073", - "tt3268790", - "tt2948530", - "tt1691020", - "tt0072610", - "tt0112843", - "tt2577854", - "tt3510718", - "tt0119238", - "tt0079400", - "tt0932661", - "tt0059094", - "tt0069786", - "tt3148552", - "tt0018684", - "tt2722504", - "tt0443448", - "tt0140859", - "tt3326880", - "tt0076706", - "tt0046087", - "tt0052941", - "tt0481494", - "tt1595637", - "tt3312180", - "tt0079806", - "tt1615885", - "tt5758726", - "tt0064310", - "tt0109831", - "tt4883124", - "tt0091508", - "tt0061989", - "tt0074873", - "tt1229236", - "tt1368860", - "tt0048227", - "tt3836530", - "tt0060754", - "tt2040537", - "tt1187046", - "tt1481573", - "tt1453403", - "tt0063067", - "tt1414374", - "tt0422272", - "tt0064695", - "tt0113318", - "tt1484918", - "tt0065962", - "tt3803664", - "tt2386490", - "tt1884312", - "tt7762748", - "tt0064704", - "tt6811018", - "tt1927172", - "tt1702587", - "tt4154916", - "tt0069489", - "tt0119623", - "tt0078748", - "tt1302001", - "tt2199587", - "tt2325491", - "tt2609326", - "tt6443294", - "tt1874434", - "tt4991652", - "tt0078203", - "tt0143016", - "tt1572777", - "tt0058977", - "tt0073241", - "tt0206553", - "tt6136778", - "tt5468022", - "tt3024324", - "tt0048805", - "tt4433646", - "tt4242100", - "tt5468014", - "tt0405615", - "tt1965118", - "tt1199453", - "tt1430132", - "tt0099313", - "tt3640068", - "tt0118980", - "tt6619330", - "tt0118604", - "tt2088980", - "tt2944980", - "tt1828320", - "tt1674058", - "tt3384870", - "tt0098158", - "tt0104710", - "tt1764366", - "tt4076164", - "tt8726116", - "tt0292109", - "tt1847672", - "tt7903530", - "tt1763305", - "tt3468698", - "tt1551641", - "tt2301592", - "tt3550902", - "tt1610394", - "tt2543336", - "tt1337673", - "tt0073784", - "tt0048047", - "tt2328696", - "tt0054358", - "tt0032728", - "tt0077630", - "tt0366860", - "tt2209792", - "tt0099991", - "tt0117883", - "tt0046040", - "tt1986769", - "tt3793230", - "tt1305806", - "tt0066834", - "tt0081073", - "tt1064953", - "tt1702016", - "tt0077952", - "tt1663999", - "tt2414766", - "tt5155486", - "tt0462373", - "tt0078976", - "tt1130980", - "tt4082524", - "tt0066262", - "tt1844811", - "tt0088157", - "tt0087777", - "tt0070921", - "tt4532818", - "tt1675434", - "tt5292240", - "tt5316540", - "tt0870101", - "tt0050506", - "tt0033317", - "tt6680116", - "tt0067381", - "tt0083677", - "tt1733582", - "tt2942196", - "tt1324058", - "tt2559458", - "tt3597732", - "tt2258399", - "tt2449810", - "tt7834022", - "tt0341569", - "tt2263468", - "tt0780516", - "tt0034928", - "tt0057681", - "tt2099556", - "tt6823368", - "tt0074404", - "tt0052205", - "tt1792643", - "tt0048966", - "tt0974536", - "tt2147521", - "tt0068698", - "tt0070488", - "tt3447592", - "tt0095984", - "tt1587685", - "tt0166996", - "tt2140113", - "tt2620490", - "tt0479341", - "tt1288636", - "tt0395119", - "tt0057643", - "tt0064571", - "tt2639514", - "tt0059641", - "tt2909748", - "tt0195185", - "tt1164999", - "tt0069951", - "tt0074437", - "tt1821355", - "tt2275743", - "tt0025301", - "tt1360832", - "tt6251024", - "tt1536051", - "tt2893780", - "tt1753521", - "tt0065850", - "tt1964634", - "tt7275816", - "tt2313896", - "tt0122111", - "tt3779570", - "tt0426931", - "tt0445934", - "tt0079301", - "tt4669788", - "tt2382090", - "tt0070297", - "tt1596783", - "tt0059160", - "tt1735839", - "tt1535101", - "tt1640219", - "tt0073345", - "tt0284851", - "tt0070839", - "tt2232578", - "tt0066445", - "tt2245277", - "tt0066392", - "tt0069004", - "tt0074849", - "tt0056940", - "tt2265565", - "tt0037449", - "tt1893415", - "tt0419692", - "tt0039735", - "tt0781511", - "tt4699130", - "tt2404555", - "tt0073620", - "tt2081367", - "tt2278870", - "tt1865335", - "tt0408236", - "tt0033729", - "tt3718824", - "tt0902982", - "tt0055283", - "tt2390341", - "tt1852977", - "tt0062868", - "tt3626180", - "tt0407536", - "tt1349646", - "tt9556850", - "tt1347280", - "tt1555069", - "tt0403120", - "tt1748016", - "tt0297884", - "tt4002772", - "tt1121986", - "tt2184267", - "tt1587436", - "tt1341335", - "tt5823690", - "tt0046436", - "tt0046896", - "tt0409379", - "tt1355230", - "tt0809533", - "tt0033370", - "tt1790658", - "tt8671116", - "tt0048465", - "tt1183923", - "tt0928124", - "tt0038214", - "tt2371486", - "tt3921858", - "tt0040395", - "tt0092048", - "tt1327709", - "tt0040109", - "tt1586752", - "tt2260254", - "tt1568338", - "tt2041534", - "tt0075670", - "tt1845804", - "tt0051911", - "tt0081595", - "tt2298274", - "tt2484184", - "tt1888509", - "tt1085469", - "tt6162808", - "tt6733368", - "tt0041838", - "tt1429432", - "tt1252616", - "tt0064122", - "tt1069238", - "tt0070183", - "tt9783876", - "tt2679576", - "tt1780762", - "tt2262270", - "tt8554256", - "tt1173745", - "tt1851006", - "tt1646959", - "tt0073806", - "tt3235880", - "tt1647476", - "tt2325993", - "tt1692504", - "tt0045551", - "tt0080491", - "tt1131743", - "tt1993396", - "tt3121562", - "tt4080728", - "tt0077807", - "tt3781616", - "tt6861980", - "tt2328745", - "tt3398268", - "tt1891905", - "tt1883180", - "tt8920938", - "tt0120594", - "tt3266948", - "tt1954701", - "tt2298224", - "tt5828640", - "tt0352625", - "tt2018108", - "tt0058126", - "tt3208802", - "tt5781724", - "tt0201952", - "tt4780842", - "tt0280933", - "tt5623224", - "tt1221972", - "tt0059163", - "tt3102906", - "tt1444252", - "tt7358302", - "tt0075888", - "tt0104688", - "tt2381317", - "tt1744825", - "tt0014636", - "tt0457517", - "tt7297962", - "tt4193216", - "tt0811011", - "tt0904127", - "tt0109747", - "tt0185714", - "tt0081299", - "tt1593643", - "tt0058319", - "tt0349865", - "tt9455066", - "tt6151714", - "tt0270509", - "tt0080563", - "tt5638952", - "tt9454978", - "tt0106642", - "tt0317321", - "tt9457966", - "tt6709826", - "tt4525270", - "tt1447499", - "tt6012750", - "tt4769430", - "tt1930458", - "tt3150966", - "tt6010518", - "tt1514425", - "tt6805328", - "tt0280096", - "tt2252552", - "tt0058402", - "tt9617546", - "tt2303110", - "tt0096030", - "tt0092288", - "tt2186766", - "tt0033029", - "tt0074412", - "tt1308109", - "tt0082159", - "tt1268208", - "tt1156448", - "tt1492842", - "tt2645670", - "tt0087746", - "tt0043392", - "tt2162574", - "tt0069229", - "tt2091455", - "tt0113194", - "tt1234550", - "tt2726270", - "tt0053390", - "tt0106758", - "tt5843838", - "tt1353997", - "tt1027698", - "tt1867566", - "tt2557256", - "tt0347618", - "tt0085398", - "tt0082956", - "tt1650516", - "tt0281364", - "tt1424045", - "tt3806888", - "tt0089477", - "tt2459028", - "tt2584018", - "tt1477109", - "tt1016090", - "tt1055363", - "tt1204966", - "tt4197006", - "tt4218572", - "tt1334456", - "tt0093881", - "tt2106577", - "tt0068415", - "tt0958824", - "tt7078004", - "tt1345772", - "tt0780500", - "tt0831316", - "tt1151309", - "tt2586070", - "tt0487920", - "tt2524674", - "tt1821352", - "tt0113044", - "tt0072735", - "tt0100680", - "tt0398839", - "tt0313608", - "tt0105219", - "tt5207004", - "tt0047873", - "tt0411058", - "tt9914458", - "tt4641776", - "tt0153930", - "tt2412568", - "tt0080116", - "tt1869425", - "tt0030746", - "tt0055139", - "tt2408734", - "tt0067983", - "tt1190910", - "tt7014110", - "tt1949605", - "tt1241018", - "tt1654833", - "tt1492886", - "tt0065720", - "tt0073634", - "tt5586110", - "tt0082425", - "tt0787495", - "tt0068515", - "tt3924782", - "tt6198412", - "tt4480398", - "tt1119178", - "tt0222425", - "tt2414822", - "tt0195192", - "tt0071721", - "tt1229821", - "tt0817910", - "tt1249453", - "tt0036716", - "tt0907681", - "tt0062652", - "tt0072198", - "tt1931551", - "tt4626160", - "tt4147210", - "tt0810895", - "tt0019509", - "tt0243991", - "tt2179087", - "tt1637713", - "tt0312723", - "tt4641730", - "tt0068268", - "tt0047200", - "tt0073343", - "tt1288367", - "tt2988852", - "tt8569610", - "tt2335732", - "tt4518260", - "tt1117386", - "tt0085409", - "tt0160586", - "tt2363181", - "tt1200852", - "tt0324133", - "tt0031455", - "tt1034415", - "tt7616798", - "tt8115282", - "tt0059263", - "tt0041931", - "tt2202569", - "tt0047336", - "tt2258647", - "tt0043338", - "tt0031725", - "tt0031210", - "tt0914363", - "tt1421383", - "tt0854670", - "tt1382655", - "tt0031235", - "tt1341795", - "tt0040559", - "tt0099969", - "tt0050706", - "tt1176453", - "tt0077711", - "tt0075970", - "tt0092646", - "tt1339191", - "tt1455619", - "tt1552423", - "tt1540761", - "tt1337686", - "tt0085809", - "tt1286746", - "tt0055988", - "tt1230380", - "tt0104489", - "tt0039631", - "tt0047478", - "tt0087028", - "tt0040724", - "tt0046478", - "tt0279331", - "tt2186426", - "tt1496884", - "tt0043132", - "tt1217301", - "tt2385001", - "tt1564369", - "tt0061589", - "tt1734586", - "tt1540803", - "tt0034399", - "tt8774622", - "tt0487176", - "tt0056187", - "tt2354437", - "tt6284404", - "tt0490240", - "tt0076845", - "tt3475596", - "tt0035763", - "tt0439848", - "tt0480919", - "tt0025452", - "tt0453560", - "tt1034010", - "tt2071441", - "tt2701772", - "tt0120753", - "tt2153963", - "tt1160907", - "tt1446208", - "tt0044981", - "tt1307858", - "tt1951218", - "tt1508349", - "tt0068734", - "tt1849899", - "tt1977681", - "tt0033152", - "tt2202750", - "tt2147277", - "tt1847713", - "tt0756729", - "tt6832388", - "tt0065007", - "tt0118840", - "tt1087522", - "tt1520399", - "tt4501706", - "tt1648093", - "tt1984153", - "tt0312329", - "tt1874779", - "tt2027128", - "tt0406158", - "tt1330216", - "tt1342115", - "tt1501652", - "tt1619880", - "tt6627192", - "tt1869315", - "tt0033853", - "tt2320087", - "tt1016241", - "tt0050243", - "tt0115509", - "tt0041767", - "tt4835456", - "tt0290057", - "tt1606189", - "tt0878657", - "tt2654124", - "tt2825924", - "tt7242142", - "tt4820312", - "tt0044446", - "tt3678188", - "tt0100065", - "tt3481210", - "tt2056690", - "tt2652476", - "tt2196236", - "tt0094752", - "tt5113086", - "tt0045846", - "tt3298522", - "tt0059624", - "tt3396166", - "tt0059714", - "tt0303021", - "tt1942787", - "tt1228963", - "tt0080016", - "tt0096071", - "tt1848832", - "tt1541664", - "tt6322422", - "tt4475992", - "tt1876446", - "tt3033080", - "tt1489248", - "tt1965136", - "tt2345761", - "tt0071437", - "tt0455961", - "tt2753048", - "tt0067995", - "tt5605470", - "tt0061865", - "tt0206545", - "tt1381413", - "tt0810772", - "tt0165237", - "tt1160374", - "tt2461736", - "tt0475323", - "tt2403883", - "tt1329404", - "tt0756632", - "tt4086116", - "tt3816614", - "tt0081515", - "tt0181611", - "tt4065340", - "tt0070190", - "tt8332772", - "tt3975510", - "tt2402619", - "tt1887748", - "tt0060288", - "tt2216212", - "tt0073200", - "tt0054724", - "tt1544578", - "tt5495040", - "tt4907174", - "tt0067491", - "tt1461249", - "tt0060091", - "tt0044896", - "tt0985695", - "tt5490470", - "tt0053810", - "tt0105719", - "tt0068739", - "tt1865545", - "tt3358328", - "tt3421124", - "tt0104115", - "tt1971558", - "tt2945892", - "tt9378850", - "tt2475846", - "tt1876283", - "tt3993802", - "tt1523485", - "tt0069952", - "tt1129415", - "tt8386710", - "tt4519312", - "tt0066564", - "tt0087578", - "tt0062859", - "tt0062844", - "tt0808508", - "tt0054295", - "tt2490004", - "tt1376168", - "tt7048676", - "tt1449379", - "tt3280264", - "tt2006181", - "tt0079855", - "tt4405860", - "tt0073107", - "tt0092674", - "tt2909476", - "tt0042265", - "tt2180543", - "tt1117636", - "tt1307926", - "tt1659253", - "tt0023938", - "tt1566637", - "tt6591520", - "tt1562563", - "tt4820224", - "tt0066863", - "tt7549452", - "tt0110668", - "tt0049871", - "tt3289724", - "tt6857958", - "tt1255919", - "tt1715223", - "tt1577065", - "tt0304584", - "tt0091707", - "tt9301884", - "tt2984576", - "tt1179258", - "tt0097263", - "tt9015764", - "tt3913194", - "tt0053334", - "tt0372921", - "tt0078919", - "tt2064905", - "tt2657138", - "tt1082064", - "tt2292182", - "tt0080895", - "tt0064555", - "tt0100139", - "tt1931466", - "tt5822160", - "tt3030354", - "tt0083755", - "tt0052148", - "tt3336368", - "tt8396188", - "tt2396224", - "tt2015261", - "tt1877707", - "tt0077429", - "tt0075617", - "tt0029192", - "tt4949290", - "tt2925768", - "tt5262450", - "tt3219604", - "tt0385639", - "tt0065737", - "tt6729000", - "tt3233972", - "tt0275067", - "tt0828103", - "tt0081031", - "tt0951333", - "tt2072164", - "tt4603210", - "tt0093843", - "tt0043503", - "tt0113241", - "tt0105395", - "tt7232928", - "tt0056405", - "tt0099817", - "tt10068994", - "tt0445409", - "tt1567233", - "tt0048336", - "tt0084287", - "tt6984534", - "tt0298856", - "tt0117108", - "tt0113234", - "tt4557998", - "tt7893992", - "tt2719868", - "tt0086459", - "tt0065182", - "tt0113858", - "tt4595882", - "tt1063111", - "tt0083805", - "tt0059803", - "tt3033948", - "tt1007950", - "tt0065451", - "tt0050208", - "tt2889716", - "tt0079843", - "tt1130983", - "tt0099701", - "tt3735554", - "tt0055797", - "tt2320073", - "tt1727795", - "tt2108535", - "tt1946381", - "tt0049407", - "tt0057168", - "tt0049013", - "tt4578050", - "tt0492881", - "tt0109098", - "tt9685652", - "tt0104879", - "tt1753786", - "tt1151911", - "tt4447108", - "tt0034027", - "tt0046076", - "tt6471628", - "tt1512310", - "tt1242516", - "tt4059702", - "tt0892051", - "tt0071161", - "tt1645916", - "tt1118693", - "tt0084796", - "tt1209361", - "tt3261302", - "tt0043540", - "tt2481554", - "tt0102674", - "tt0076099", - "tt4951982", - "tt2171901", - "tt0070287", - "tt0059470", - "tt0048976", - "tt5470222", - "tt0865560", - "tt0040761", - "tt8075192", - "tt4505830", - "tt0067520", - "tt3198698", - "tt0023825", - "tt1425252", - "tt0103078", - "tt0880570", - "tt4226970", - "tt1679248", - "tt0076888", - "tt1710573", - "tt0370754", - "tt1621426", - "tt0053849", - "tt0057371", - "tt0099606", - "tt0059560", - "tt0915463", - "tt2006801", - "tt2179226", - "tt0040974", - "tt1705790", - "tt1864494", - "tt2331880", - "tt2290709", - "tt0381348", - "tt4644382", - "tt1667439", - "tt0110044", - "tt2053423", - "tt2133333", - "tt1090646", - "tt0419663", - "tt0414344", - "tt4314716", - "tt3034594", - "tt0083619", - "tt4771704", - "tt0243736", - "tt0038395", - "tt0117533", - "tt3481550", - "tt0048260", - "tt0068577", - "tt0097498", - "tt0056585", - "tt0363768", - "tt0103316", - "tt4711762", - "tt0070312", - "tt0100791", - "tt4636022", - "tt0454932", - "tt3699692", - "tt0070184", - "tt2497808", - "tt5072350", - "tt0115851", - "tt4614936", - "tt0174480", - "tt4616250", - "tt0120157", - "tt1716759", - "tt0067535", - "tt0468965", - "tt3236976", - "tt5634960", - "tt2176722", - "tt2312262", - "tt1636629", - "tt0071478", - "tt0083715", - "tt0463960", - "tt4065212", - "tt1249311", - "tt4805816", - "tt2397521", - "tt0056346", - "tt1800671", - "tt0049405", - "tt0082596", - "tt1245735", - "tt2277932", - "tt2822578", - "tt0082279", - "tt4508542", - "tt1797487", - "tt0094899", - "tt1235200", - "tt0816616", - "tt1970077", - "tt2073121", - "tt7077210", - "tt8746914", - "tt4261326", - "tt7112154", - "tt0847526", - "tt6857956", - "tt0041223", - "tt0053577", - "tt9855990", - "tt0056626", - "tt6266538", - "tt2010976", - "tt0478210", - "tt3343868", - "tt0287733", - "tt7959026", - "tt0068271", - "tt0095719", - "tt6682134", - "tt1887703", - "tt0115701", - "tt0067975", - "tt1300155", - "tt1763288", - "tt2215366", - "tt1754506", - "tt1220627", - "tt2510268", - "tt0098333", - "tt0100975", - "tt5373786", - "tt8684556", - "tt0090310", - "tt3564200", - "tt0114272", - "tt1754736", - "tt9493030", - "tt0028784", - "tt0049125", - "tt0063348", - "tt0046035", - "tt1488594", - "tt3187378", - "tt0089665", - "tt1436034", - "tt1229370", - "tt2396495", - "tt4677938", - "tt0082537", - "tt0105871", - "tt0060877", - "tt1502417", - "tt0094850", - "tt0095626", - "tt3382842", - "tt0086886", - "tt0073172", - "tt3488056", - "tt0107384", - "tt1331323", - "tt0062618", - "tt5537228", - "tt5543678", - "tt0045699", - "tt0079173", - "tt0193364", - "tt4701182", - "tt0883391", - "tt9759918", - "tt0070835", - "tt3454574", - "tt0080645", - "tt4431326", - "tt5954892", - "tt2739338", - "tt3685818", - "tt0374584", - "tt0084112", - "tt4636252", - "tt4423778", - "tt0140914", - "tt0068542", - "tt3893038", - "tt2243469", - "tt4935110", - "tt4614940", - "tt3730510", - "tt5612156", - "tt0091035", - "tt0977663", - "tt9109306", - "tt6433832", - "tt1754228", - "tt0074920", - "tt2273657", - "tt1665418", - "tt0098084", - "tt1745958", - "tt3977428", - "tt0235712", - "tt3520714", - "tt0110168", - "tt1650413", - "tt3732950", - "tt0046789", - "tt0092848", - "tt4269238", - "tt4673790", - "tt1790669", - "tt0827735", - "tt0078989", - "tt0315327", - "tt0073234", - "tt5732530", - "tt0055429", - "tt0084191", - "tt0050162", - "tt3657684", - "tt0071167", - "tt1883269", - "tt3215826", - "tt1899285", - "tt7138894", - "tt5584756", - "tt0089835", - "tt0113492", - "tt0046928", - "tt0085868", - "tt0089436", - "tt0178868", - "tt0092690", - "tt0091601", - "tt1321509", - "tt6150184", - "tt2124180", - "tt2239824", - "tt1038011", - "tt1039900", - "tt7478112", - "tt1852036", - "tt7297336", - "tt6734754", - "tt0069890", - "tt0059764", - "tt0303732", - "tt0239510", - "tt2094787", - "tt1880418", - "tt1723123", - "tt3819610", - "tt0014900", - "tt3198000", - "tt8782974", - "tt5822140", - "tt1860238", - "tt0068282", - "tt5985052", - "tt5514674", - "tt1210344", - "tt2477218", - "tt4419596", - "tt0996958", - "tt4703676", - "tt2204315", - "tt1893371", - "tt7913478", - "tt5559586", - "tt3684500", - "tt0067511", - "tt0075035", - "tt3400980", - "tt0120323", - "tt0831280", - "tt0051845", - "tt5543604", - "tt7730102", - "tt1984110", - "tt0968311", - "tt0082084", - "tt3058618", - "tt0379725", - "tt4123430", - "tt8223844", - "tt4119054", - "tt4558396", - "tt1857718", - "tt2062622", - "tt5492906", - "tt0107091", - "tt6095616", - "tt0081662", - "tt2419986", - "tt0094320", - "tt4636254", - "tt0057239", - "tt3303730", - "tt4497338", - "tt4636298", - "tt1429313", - "tt5432712", - "tt4075458", - "tt0102422", - "tt0075999", - "tt1827372", - "tt4912452", - "tt1624996", - "tt0787485", - "tt3059816", - "tt0809432", - "tt3892620", - "tt0085514", - "tt3734678", - "tt1384925", - "tt0024951", - "tt0034965", - "tt3520290", - "tt1815746", - "tt0118163", - "tt7867360", - "tt3393070", - "tt7651078", - "tt2922590", - "tt2901962", - "tt6917242", - "tt2126357", - "tt1761005", - "tt3385524", - "tt4404296", - "tt1618432", - "tt4940780", - "tt1562849", - "tt1989593", - "tt0056315", - "tt4766604", - "tt0058307", - "tt4567486", - "tt4696222", - "tt2180587", - "tt1008010", - "tt6731636", - "tt1361828", - "tt0166314", - "tt5907748", - "tt0043733", - "tt3127698", - "tt0087616", - "tt0095649", - "tt0071507", - "tt7224824", - "tt4478526", - "tt5848714", - "tt5651338", - "tt3479208", - "tt2530392", - "tt0062851", - "tt2405182", - "tt4441422", - "tt0049601", - "tt1692084", - "tt0110805", - "tt0119842", - "tt0078435", - "tt0062852", - "tt6069264", - "tt2250282", - "tt1421378", - "tt1525915", - "tt2338846", - "tt0062853", - "tt3306858", - "tt4227282", - "tt0065968", - "tt3400932", - "tt1319709", - "tt0020686", - "tt0034277", - "tt3697418", - "tt5947416", - "tt7579788", - "tt1504319", - "tt0066827", - "tt3320500", - "tt2916416", - "tt2402179", - "tt0058238", - "tt0071203", - "tt4480494", - "tt3375286", - "tt3298600", - "tt3698118", - "tt4173478", - "tt5161376", - "tt0070957", - "tt1772261", - "tt5032492", - "tt5994894", - "tt1038915", - "tt0066773", - "tt0258766", - "tt4671274", - "tt0307453", - "tt0060429", - "tt0113305", - "tt0048124", - "tt0101831", - "tt0098486", - "tt0048790", - "tt0067017", - "tt0108101", - "tt0062155", - "tt0089562", - "tt2847438", - "tt4621630", - "tt1331329", - "tt1928329", - "tt0097814", - "tt1545985", - "tt6589464", - "tt1566501", - "tt1998204", - "tt5286432", - "tt4511566", - "tt2401181", - "tt1833888", - "tt0051381", - "tt0013496", - "tt1653913", - "tt3003800", - "tt4859034", - "tt1895321", - "tt3952900", - "tt0310357", - "tt1706470", - "tt0050271", - "tt0064074", - "tt0036443", - "tt1203517", - "tt1334536", - "tt0062870", - "tt1618372", - "tt2035670", - "tt0399295", - "tt0119698", - "tt3569970", - "tt0102749", - "tt2790236", - "tt0114296", - "tt0811128", - "tt5991410", - "tt1558575", - "tt0069738", - "tt5369484", - "tt0067176", - "tt1865503", - "tt1656170", - "tt0078975", - "tt6523720", - "tt2041331", - "tt0081467", - "tt1260365", - "tt2215457", - "tt3697946", - "tt5136064", - "tt0050294", - "tt4510398", - "tt2061869", - "tt0017448", - "tt0082094", - "tt1780856", - "tt1422674", - "tt0370244", - "tt0066104", - "tt1935940", - "tt0045814", - "tt1954352", - "tt0326965", - "tt2039399", - "tt0057363", - "tt4010918", - "tt4076058", - "tt0032206", - "tt0071950", - "tt3809308", - "tt3054798", - "tt1734582", - "tt0365658", - "tt1282153", - "tt0066053", - "tt5543600", - "tt0104350", - "tt0051848", - "tt0041969", - "tt0079759", - "tt0033226", - "tt0113376", - "tt4699534", - "tt2474932", - "tt1454505", - "tt0040444", - "tt2887322", - "tt2761578", - "tt0080503", - "tt1425922", - "tt2184227", - "tt2883352", - "tt6412864", - "tt7125860", - "tt3900206", - "tt2848324", - "tt3254796", - "tt5693136", - "tt0057523", - "tt1529235", - "tt4060866", - "tt0069048", - "tt0059678", - "tt0064904", - "tt0048291", - "tt5651840", - "tt2337576", - "tt4806012", - "tt3896100", - "tt1571409", - "tt3685668", - "tt4693464", - "tt0039349", - "tt1467273", - "tt2906276", - "tt5112692", - "tt0113820", - "tt0084935", - "tt1371081", - "tt1756415", - "tt0439771", - "tt1042497", - "tt0073817", - "tt9075656", - "tt0054452", - "tt0050267", - "tt0071521", - "tt3501416", - "tt3531578", - "tt1441373", - "tt1159922", - "tt0120303", - "tt2299248", - "tt0099026", - "tt0055571", - "tt4126394", - "tt0081248", - "tt0120108", - "tt0473364", - "tt0113824", - "tt0012494", - "tt0369903", - "tt2013293", - "tt0104652", - "tt2042447", - "tt0064395", - "tt8490686", - "tt2014319", - "tt1937269", - "tt0061489", - "tt0057986", - "tt1483756", - "tt0092067", - "tt0488962", - "tt0347149", - "tt7874348", - "tt7583152", - "tt2326574", - "tt0115033", - "tt3283556", - "tt0051047", - "tt0079833", - "tt0079858", - "tt0065079", - "tt5788136", - "tt3582020", - "tt1185834", - "tt0096283", - "tt9747392", - "tt5804314", - "tt6174226", - "tt4922692", - "tt0067738", - "tt5929754", - "tt5923962", - "tt5269038", - "tt0066436", - "tt0060893", - "tt0040491", - "tt3305388", - "tt0062792", - "tt4203788", - "tt2194826", - "tt1227183", - "tt0071200", - "tt0057560", - "tt0093820", - "tt1716753", - "tt0959306", - "tt1341340", - "tt0071994", - "tt1288376", - "tt2828954", - "tt4211044", - "tt0079788", - "tt3893280", - "tt2381046", - "tt0047889", - "tt0058335", - "tt0903627", - "tt1411232", - "tt3343784", - "tt0222368", - "tt0035262", - "tt1350512", - "tt2433040", - "tt6086718", - "tt0031260", - "tt0240419", - "tt0089591", - "tt1606390", - "tt8760550", - "tt0041847", - "tt0034946", - "tt0035309", - "tt0090693", - "tt2241676", - "tt3746298", - "tt0280609", - "tt0086232", - "tt6704776", - "tt3183630", - "tt0066892", - "tt6235786", - "tt0089816", - "tt0061429", - "tt0051437", - "tt0459102", - "tt0166843", - "tt6330052", - "tt2106671", - "tt0807028", - "tt2325518", - "tt0047880", - "tt1464191", - "tt3778010", - "tt0085496", - "tt6628102", - "tt0064775", - "tt3702996", - "tt0084684", - "tt0090798", - "tt2113659", - "tt0053220", - "tt2987732", - "tt0034398", - "tt0111002", - "tt0029605", - "tt2238470", - "tt0092910", - "tt0093468", - "tt0067727", - "tt2402985", - "tt0045464", - "tt0110296", - "tt0081613", - "tt0470982", - "tt0082970", - "tt4030442", - "tt0082764", - "tt0076240", - "tt0790612", - "tt5325604", - "tt0092615", - "tt7083826", - "tt2133239", - "tt1185837", - "tt0048593", - "tt1133995", - "tt2992552", - "tt1289419", - "tt2543702", - "tt0088355", - "tt4118606", - "tt4189494", - "tt0120514", - "tt0048087", - "tt0076625", - "tt1684927", - "tt2262161", - "tt0073008", - "tt9149982", - "tt9192942", - "tt0120536", - "tt3513054", - "tt0084740", - "tt4167720", - "tt1321869", - "tt0328007", - "tt0893406", - "tt2837336", - "tt4556370", - "tt0106436", - "tt0048233", - "tt0098725", - "tt0155350", - "tt0302436", - "tt1836987", - "tt0103002", - "tt1562568", - "tt1758575", - "tt3526286", - "tt0371853", - "tt3952108", - "tt0120428", - "tt1482393", - "tt1699147", - "tt0107286", - "tt8515802", - "tt0062790", - "tt0860454", - "tt6985448", - "tt0078259", - "tt0109302", - "tt1361843", - "tt3509114", - "tt8883456", - "tt5265898", - "tt0094008", - "tt3339680", - "tt5028340", - "tt0052876", - "tt0064652", - "tt9409854", - "tt1621046", - "tt0108451", - "tt1273221", - "tt0470993", - "tt0102655", - "tt1298594", - "tt2654572", - "tt2910508", - "tt4074364", - "tt1135968", - "tt4587366", - "tt1650042", - "tt0049452", - "tt3424690", - "tt0056556", - "tt0175790", - "tt7025294", - "tt4871980", - "tt0473102", - "tt1780983", - "tt0036260", - "tt4276752", - "tt2349460", - "tt4537896", - "tt0052911", - "tt0029947", - "tt9815588", - "tt0075330", - "tt0057076", - "tt0357139", - "tt9811332", - "tt1319722", - "tt5276332", - "tt0092549", - "tt5953854", - "tt0094594", - "tt4614612", - "tt7241654", - "tt0411269", - "tt3800796", - "tt2191888", - "tt2325002", - "tt2322517", - "tt0059800", - "tt4661798", - "tt2497980", - "tt5011626", - "tt0058150", - "tt8171080", - "tt4392770", - "tt5160928", - "tt0064757", - "tt0055928", - "tt5241578", - "tt1186788", - "tt0100873", - "tt1324055", - "tt1396523", - "tt0073043", - "tt0015863", - "tt0247303", - "tt0081400", - "tt2815030", - "tt9596638", - "tt1262990", - "tt0165982", - "tt0312004", - "tt0101564", - "tt9282616", - "tt0424095", - "tt1623742", - "tt0067333", - "tt0150090", - "tt6660238", - "tt2364949", - "tt0099240", - "tt0098692", - "tt6905696", - "tt0185371", - "tt2036376", - "tt5222768", - "tt0183704", - "tt0339736", - "tt1587156", - "tt0227197", - "tt0076752", - "tt0073714", - "tt0099399", - "tt0196100", - "tt5540194", - "tt6900448", - "tt0094933", - "tt0094995", - "tt9581760", - "tt2268573", - "tt0079574", - "tt0070672", - "tt0081062", - "tt0981224", - "tt2968804", - "tt5294198", - "tt0082398", - "tt0478125", - "tt8587730", - "tt0093638", - "tt1951095", - "tt0070022", - "tt1230215", - "tt0091814", - "tt0475417", - "tt0110588", - "tt3029476", - "tt0082558", - "tt3687186", - "tt2345613", - "tt3165630", - "tt2078552", - "tt0069822", - "tt0119908", - "tt2402603", - "tt2443822", - "tt3138376", - "tt0102898", - "tt2386285", - "tt0093091", - "tt0093428", - "tt0106466", - "tt0076028", - "tt6592296", - "tt0808285", - "tt0072912", - "tt0094315", - "tt1920945", - "tt5822154", - "tt0073880", - "tt0143145", - "tt0120347", - "tt0097880", - "tt1790834", - "tt2107861", - "tt0113189", - "tt0246460", - "tt2378884", - "tt1776900", - "tt0286306", - "tt6572190", - "tt6591584", - "tt1241316", - "tt2190838", - "tt0255605", - "tt0070895", - "tt7958614", - "tt1064744", - "tt0242998", - "tt2488778", - "tt0105156", - "tt0055963", - "tt2396721", - "tt1699755", - "tt0059712", - "tt0995851", - "tt7019808", - "tt6904272", - "tt0023581", - "tt0096117", - "tt0042209", - "tt0092906", - "tt0115994", - "tt0075620", - "tt0085823", - "tt1496005", - "tt1610525", - "tt0081809", - "tt0289889", - "tt0120383", - "tt2552394", - "tt0083144", - "tt0800027", - "tt3687398", - "tt3261114", - "tt0499570", - "tt0469318", - "tt4796122", - "tt4608402", - "tt3995348", - "tt6060874", - "tt2072193", - "tt0070909", - "tt4837328", - "tt8361196", - "tt2022528", - "tt7627790", - "tt0067630", - "tt0100802", - "tt1234721", - "tt0831387", - "tt0199753", - "tt0338013", - "tt1441395", - "tt0119177", - "tt0074559", - "tt0090948", - "tt3381610", - "tt3905764", - "tt0183523", - "tt0107840", - "tt0120738", - "tt1631867", - "tt2179136", - "tt0307479", - "tt0499549", - "tt8925540", - "tt0181689", - "tt3186318", - "tt0094731", - "tt1242447", - "tt3831810", - "tt0070565", - "tt0109417", - "tt0120402", - "tt3397160", - "tt1034306", - "tt0091166", - "tt5818818", - "tt0086356", - "tt2510028", - "tt3397754", - "tt3433074", - "tt1227177", - "tt0234748", - "tt0118001", - "tt1401631", - "tt0081163", - "tt0117102", - "tt0910885", - "tt0120723", - "tt0047574", - "tt6966692", - "tt1688649", - "tt0056048", - "tt1568343", - "tt0101694", - "tt5182856", - "tt0101902", - "tt0091653", - "tt3499048", - "tt0053270", - "tt0085450", - "tt0493402", - "tt0385017", - "tt2395199", - "tt0206634", - "tt1540767", - "tt0083107", - "tt2723240", - "tt0123755", - "tt0047945", - "tt0050407", - "tt2980708", - "tt0865297", - "tt0077975", - "tt0087592", - "tt0142316", - "tt1735862", - "tt5061814", - "tt2560102", - "tt1143896", - "tt1707391", - "tt0104808", - "tt1577052", - "tt0060588", - "tt1462901", - "tt0102395", - "tt0116414", - "tt3993894", - "tt4077118", - "tt3824412", - "tt2057445", - "tt1579232", - "tt9287206", - "tt1605777", - "tt0099018", - "tt0138703", - "tt1498870", - "tt2996684", - "tt2402085", - "tt4056738", - "tt1629295", - "tt0787523", - "tt4131496", - "tt0058649", - "tt0104139", - "tt1242618", - "tt3093546", - "tt0114745", - "tt2338424", - "tt0023622", - "tt0462329", - "tt0884726", - "tt0084565", - "tt0057609", - "tt9584192", - "tt0047036", - "tt0032670", - "tt0023042", - "tt2233979", - "tt2035630", - "tt0888693", - "tt0054127", - "tt0097757", - "tt0025371", - "tt0023241", - "tt0083232", - "tt0088936", - "tt2948840", - "tt0433349", - "tt1967614", - "tt0113375", - "tt2066176", - "tt5295774", - "tt0099575", - "tt0093737", - "tt0058886", - "tt1470171", - "tt2369396", - "tt0057518", - "tt0088930", - "tt2714380", - "tt0054594", - "tt0094750", - "tt2465140", - "tt5842890", - "tt6081670", - "tt0375604", - "tt0405163", - "tt1807610", - "tt2199238", - "tt3236120", - "tt0097763", - "tt0198871", - "tt4981636", - "tt0368323", - "tt2089750", - "tt0058499", - "tt0116442", - "tt0963965", - "tt4003440", - "tt0052611", - "tt0053141", - "tt0165662", - "tt7966920", - "tt5463162", - "tt0038958", - "tt0046807", - "tt1613062", - "tt1825918", - "tt9759926", - "tt3203620", - "tt2667918", - "tt3442990", - "tt0082467", - "tt3318750", - "tt1483324", - "tt8262592", - "tt8243908", - "tt0177625", - "tt0081568", - "tt1657510", - "tt5464234", - "tt0082776", - "tt0100143", - "tt0068435", - "tt2893490", - "tt0418586", - "tt2474958", - "tt0096454", - "tt0250468", - "tt4054654", - "tt3614530", - "tt1649780", - "tt1878942", - "tt2350892", - "tt0118900", - "tt0090270", - "tt1290135", - "tt0985025", - "tt8671138", - "tt0050556", - "tt0212132", - "tt0262432", - "tt2380331", - "tt0106557", - "tt8065796", - "tt5834760", - "tt7715202", - "tt1242843", - "tt6097798", - "tt7683350", - "tt1242599", - "tt0057490", - "tt0115862", - "tt0063829", - "tt0089122", - "tt1930546", - "tt2126362", - "tt0079826", - "tt0150111", - "tt2034176", - "tt2461520", - "tt1047011", - "tt0087428", - "tt8574252", - "tt0772168", - "tt0065446", - "tt0083336", - "tt2081437", - "tt0052365", - "tt0070791", - "tt1925435", - "tt1930294", - "tt1853643", - "tt0116861", - "tt0490166", - "tt0209095", - "tt1945062", - "tt0110329", - "tt8308174", - "tt0339294", - "tt0066214", - "tt0202677", - "tt5999530", - "tt0113636", - "tt0087727", - "tt4902266", - "tt0094919", - "tt0089604", - "tt0101846", - "tt0089118", - "tt0054195", - "tt0086859", - "tt0068240", - "tt0120907", - "tt3862750", - "tt0083851", - "tt1629705", - "tt0266391", - "tt0425458", - "tt0120112", - "tt5960374", - "tt0088146", - "tt0058092", - "tt0093940", - "tt1837562", - "tt2658428", - "tt1259573", - "tt0134630", - "tt1155076", - "tt2187884", - "tt0060232", - "tt0093036", - "tt1260581", - "tt0102960", - "tt0049456", - "tt0086978", - "tt8108230", - "tt2180994", - "tt1700845", - "tt5072852", - "tt0109279", - "tt1259574", - "tt1274586", - "tt3164256", - "tt0979434", - "tt0092804", - "tt0098621", - "tt1411238", - "tt0096219", - "tt0059797", - "tt0116282", - "tt0090927", - "tt0395125", - "tt0037932", - "tt6360872", - "tt0039694", - "tt0074258", - "tt0181151", - "tt0171768", - "tt6932818", - "tt6343314", - "tt5304996", - "tt0210382", - "tt2318527", - "tt0063323", - "tt6927152", - "tt0104938", - "tt8046144", - "tt1687281", - "tt0093582", - "tt0107927", - "tt0456020", - "tt6893370", - "tt7545524", - "tt0050766", - "tt0356618", - "tt0047437", - "tt0133059", - "tt0937237", - "tt0089961", - "tt0301171", - "tt0057590", - "tt7401588", - "tt0053793", - "tt3714720", - "tt2582500", - "tt2815966", - "tt0119311", - "tt0082361", - "tt1741243", - "tt0052295", - "tt3082898", - "tt0094118", - "tt0061770", - "tt0119227", - "tt6433456", - "tt0101587", - "tt2101570", - "tt6973866", - "tt3263614", - "tt1540741", - "tt3322892", - "tt0113347", - "tt6258766", - "tt0132910", - "tt5465970", - "tt1054580", - "tt0062794", - "tt0051337", - "tt5501104", - "tt1645131", - "tt0063013", - "tt2883434", - "tt3534602", - "tt0151568", - "tt0093278", - "tt2752688", - "tt0175526", - "tt4501454", - "tt0105130", - "tt0120831", - "tt5083738", - "tt1756851", - "tt3167458", - "tt0058333", - "tt0091875", - "tt0279889", - "tt0106941", - "tt2077851", - "tt1575694", - "tt0060424", - "tt1196956", - "tt1658801", - "tt1757742", - "tt7295450", - "tt2091478", - "tt2274752", - "tt0132512", - "tt0097328", - "tt0086619", - "tt1990181", - "tt0051369", - "tt0250323", - "tt2304426", - "tt0476958", - "tt0052918", - "tt1212974", - "tt1838603", - "tt0058213", - "tt3628584", - "tt4854820", - "tt2679552", - "tt8750664", - "tt2234261", - "tt8594624", - "tt0204137", - "tt2093991", - "tt0053318", - "tt0111400", - "tt0099012", - "tt0080388", - "tt1536048", - "tt5540622", - "tt0289635", - "tt1029120", - "tt0102316", - "tt0098575", - "tt2465146", - "tt3707104", - "tt0044399", - "tt1179794", - "tt1770734", - "tt1552224", - "tt1570989", - "tt0051994", - "tt0109936", - "tt0082334", - "tt1781827", - "tt9168816", - "tt1049402", - "tt0054743", - "tt0059017", - "tt0066728", - "tt9381998", - "tt0057920", - "tt0088117", - "tt3991412", - "tt0844671", - "tt9695612", - "tt0107983", - "tt6805366", - "tt0331952", - "tt2265534", - "tt0096945", - "tt0058576", - "tt0203297", - "tt1361318", - "tt0106664", - "tt0056560", - "tt0850253", - "tt1998213", - "tt1698648", - "tt5204020", - "tt2007421", - "tt1316622", - "tt0067277", - "tt0065088", - "tt0091445", - "tt0072226", - "tt0059037", - "tt4712076", - "tt0324296", - "tt5789310", - "tt0246544", - "tt0080474", - "tt3748440", - "tt7343732", - "tt0079240", - "tt2345112", - "tt0088272", - "tt0091983", - "tt0067549", - "tt0122541", - "tt1839593", - "tt1935902", - "tt1152850", - "tt0112966", - "tt2094064", - "tt2063781", - "tt0117128", - "tt1758595", - "tt1594913", - "tt1573483", - "tt0147004", - "tt5848272", - "tt0455323", - "tt3859076", - "tt0803061", - "tt0299117", - "tt2328900", - "tt1498569", - "tt0083169", - "tt0095593", - "tt0098309", - "tt0074899", - "tt4692242", - "tt0065832", - "tt2258345", - "tt1286151", - "tt4645330", - "tt7476116", - "tt2245003", - "tt3844962", - "tt0059243", - "tt4682708", - "tt3284178", - "tt0048261", - "tt1588334", - "tt3141498", - "tt0098987", - "tt0166276", - "tt0057312", - "tt0490075", - "tt5918028", - "tt2980472", - "tt5770430", - "tt0338706", - "tt2917388", - "tt0068154", - "tt0067355", - "tt2325977", - "tt0371572", - "tt4447090", - "tt0210616", - "tt7920024", - "tt0115744", - "tt4692234", - "tt2279339", - "tt0108185", - "tt0118760", - "tt3234672", - "tt2390237", - "tt5442308", - "tt1401656", - "tt1985019", - "tt3766394", - "tt5734576", - "tt1433822", - "tt0857190", - "tt5187886", - "tt9135854", - "tt2195548", - "tt0373283", - "tt1535970", - "tt0122459", - "tt1810683", - "tt6116682", - "tt5030004", - "tt0785006", - "tt1296898", - "tt0112688", - "tt0110265", - "tt8066972", - "tt0057831", - "tt3672640", - "tt0060097", - "tt2513074", - "tt0092666", - "tt0107151", - "tt0100519", - "tt0076112", - "tt3623726", - "tt0457495", - "tt0199626", - "tt0775440", - "tt0107387", - "tt4658324", - "tt3106464", - "tt6476140", - "tt0118158", - "tt2309021", - "tt3685622", - "tt1235796", - "tt0134619", - "tt3345206", - "tt1621039", - "tt0084298", - "tt0084028", - "tt1294970", - "tt1016205", - "tt0067445", - "tt0486674", - "tt0404978", - "tt0078251", - "tt2040560", - "tt1160368", - "tt3642618", - "tt1151359", - "tt0437179", - "tt3106120", - "tt5698568", - "tt0118531", - "tt2167202", - "tt2317524", - "tt0053946", - "tt0072251", - "tt0278823", - "tt3177316", - "tt0310281", - "tt0116999", - "tt0092622", - "tt0281373", - "tt0303361", - "tt0111127", - "tt1288403", - "tt0087945", - "tt0457572", - "tt0404163", - "tt0970468", - "tt1252507", - "tt1566486", - "tt3618822", - "tt0105415", - "tt0388230", - "tt0083033", - "tt1742044", - "tt0083296", - "tt2343793", - "tt0113409", - "tt0166396", - "tt0073820", - "tt0094701", - "tt1772288", - "tt0038975", - "tt0100994", - "tt0200027", - "tt2402105", - "tt0085918", - "tt0267913", - "tt0083590", - "tt0096794", - "tt0267891", - "tt0097499", - "tt1082886", - "tt3442006", - "tt0104613", - "tt0120255", - "tt2567712", - "tt0086636", - "tt1481572", - "tt0318155", - "tt0099517", - "tt0079869", - "tt0096889", - "tt0099085", - "tt0047969", - "tt1837703", - "tt0427229", - "tt2450186", - "tt0114151", - "tt2358925", - "tt0113986", - "tt1967545", - "tt0104389", - "tt0113303", - "tt1311071", - "tt0076723", - "tt6769508", - "tt5177088", - "tt0171433", - "tt0060574", - "tt0162677", - "tt0999913", - "tt0106582", - "tt1480295", - "tt1440345", - "tt0107507", - "tt0012752", - "tt0129280", - "tt5135532", - "tt1694020", - "tt1265990", - "tt0272207", - "tt0814335", - "tt0060665", - "tt0462335", - "tt0108330", - "tt1872818", - "tt9552488", - "tt3319920", - "tt2103254", - "tt1175491", - "tt0765476", - "tt5994166", - "tt1366344", - "tt0977668", - "tt0356634", - "tt0498399", - "tt0280030", - "tt0114473", - "tt1078188", - "tt0313769", - "tt0120832", - "tt1647668", - "tt0131369", - "tt1535438", - "tt0414480", - "tt2404425", - "tt0164318", - "tt1124215", - "tt0977680", - "tt7652452", - "tt0071803", - "tt1135939", - "tt0371246", - "tt0870122", - "tt0048028", - "tt0104057", - "tt1126590", - "tt0322589", - "tt0298228", - "tt1667310", - "tt1698641", - "tt1661382", - "tt2664880", - "tt1881002", - "tt0093966", - "tt0113957", - "tt1430612", - "tt1195478", - "tt0954544", - "tt1219342", - "tt0814022", - "tt1321860", - "tt2265398", - "tt0935075", - "tt0071483", - "tt6777170", - "tt2205697", - "tt1616195", - "tt6516314", - "tt0419704", - "tt0119664", - "tt1462041", - "tt4643844", - "tt4530422", - "tt1438254", - "tt0083767", - "tt2637276", - "tt0138304", - "tt0044121", - "tt6017926", - "tt2364841", - "tt4357170", - "tt8633296", - "tt2734566", - "tt6263618", - "tt0105622", - "tt4899406", - "tt0163787", - "tt0238038", - "tt0109127", - "tt3485166", - "tt0058525", - "tt2147708", - "tt1766175", - "tt3588588", - "tt0118618", - "tt0061636", - "tt0065597", - "tt4532826", - "tt0017048", - "tt0091024", - "tt0110524", - "tt0416220", - "tt0059112", - "tt5591666", - "tt3077060", - "tt0762107", - "tt3345474", - "tt0052106", - "tt1571401", - "tt2090537", - "tt4213806", - "tt3345472", - "tt6085362", - "tt0089038", - "tt0049964", - "tt0284815", - "tt1219828", - "tt1612782", - "tt1430077", - "tt6857040", - "tt0053244", - "tt0451201", - "tt0066412", - "tt0065553", - "tt5815944", - "tt1313244", - "tt9048826", - "tt0057180", - "tt7776050", - "tt0065943", - "tt2972482", - "tt0360139", - "tt0074686", - "tt0085124", - "tt0091799", - "tt3465916", - "tt0120075", - "tt0102050", - "tt3655972", - "tt0222344", - "tt1833878", - "tt0063291", - "tt1403214", - "tt0085297", - "tt2526846", - "tt4721400", - "tt0086154", - "tt0019415", - "tt1996346", - "tt2548396", - "tt1977953", - "tt2371834", - "tt0116320", - "tt1571402", - "tt3445580", - "tt7422506", - "tt1820451", - "tt0113026", - "tt0188527", - "tt0116587", - "tt0090145", - "tt6938828", - "tt2371824", - "tt1270797", - "tt5990066", - "tt0052654", - "tt6675400", - "tt8632844", - "tt1498878", - "tt1655460", - "tt8359848", - "tt0082580", - "tt4439120", - "tt3958014", - "tt7074886", - "tt0048789", - "tt1273222", - "tt1236371", - "tt0058100", - "tt0084424", - "tt0068767", - "tt0089104", - "tt6155194", - "tt2994646", - "tt3466778", - "tt1562872", - "tt0038123", - "tt6268594", - "tt7694738", - "tt1985187", - "tt9679608", - "tt3112572", - "tt0036723", - "tt6493286", - "tt0976247", - "tt0046414", - "tt0081433", - "tt1074643", - "tt0071569", - "tt2964360", - "tt7012864", - "tt0053298", - "tt0053825", - "tt1093355", - "tt1516577", - "tt2363213", - "tt2710614", - "tt1002561", - "tt0053912", - "tt7149192", - "tt1234546", - "tt3263996", - "tt0053877", - "tt0055233", - "tt3815430", - "tt9618532", - "tt9602544", - "tt0073152", - "tt0929742", - "tt0030550", - "tt3697566", - "tt5265960", - "tt1978524", - "tt0285005", - "tt0091214", - "tt3510480", - "tt0365957", - "tt0221111", - "tt4273886", - "tt1230385", - "tt6918674", - "tt6175802", - "tt0080889", - "tt5066556", - "tt1907639", - "tt0082671", - "tt8164012", - "tt4932154", - "tt0053115", - "tt6471264", - "tt0085970", - "tt0053114", - "tt4685940", - "tt0075040", - "tt2563562", - "tt0043469", - "tt1363109", - "tt0330686", - "tt0036244", - "tt3438354", - "tt1919207", - "tt3354222", - "tt3740778", - "tt0103882", - "tt8738964", - "tt0047956", - "tt1224519", - "tt0875696", - "tt2353767", - "tt4416518", - "tt0086443", - "tt2514338", - "tt1817805", - "tt6460308", - "tt0022958", - "tt0071141", - "tt2852376", - "tt1699518", - "tt0048947", - "tt4584800", - "tt1819551", - "tt2241605", - "tt0079495", - "tt0116692", - "tt4939066", - "tt0024852", - "tt1979172", - "tt0039536", - "tt1235800", - "tt2058710", - "tt3775202", - "tt1206488", - "tt3444206", - "tt6233596", - "tt3652098", - "tt1954798", - "tt2771800", - "tt9377760", - "tt3856188", - "tt5614612", - "tt1715324", - "tt7091300", - "tt0080539", - "tt3455740", - "tt0109442", - "tt2951396", - "tt3259178", - "tt0492890", - "tt2404463", - "tt0906016", - "tt0203139", - "tt0770739", - "tt0138749", - "tt0167758", - "tt1587828", - "tt0042593", - "tt0035567", - "tt0029162", - "tt1480658", - "tt0055830", - "tt1196124", - "tt8122018", - "tt6823890", - "tt0082527", - "tt3116548", - "tt0111742", - "tt4298958", - "tt0062736", - "tt1438251", - "tt0082498", - "tt0029310", - "tt2547942", - "tt0220827", - "tt0041361", - "tt0074252", - "tt3147312", - "tt1504443", - "tt0052549", - "tt1564368", - "tt0043882", - "tt0073019", - "tt0092516", - "tt3013610", - "tt1708135", - "tt1540005", - "tt0326429", - "tt0014341", - "tt0085935", - "tt0058405", - "tt0038823", - "tt0067801", - "tt3606756", - "tt2219210", - "tt0076716", - "tt4547076", - "tt7738450", - "tt0052617", - "tt0090130", - "tt0203343", - "tt0277986", - "tt4664244", - "tt4065066", - "tt0117381", - "tt3732280", - "tt0165623", - "tt0073082", - "tt5662550", - "tt2034009", - "tt0076630", - "tt3202202", - "tt0963194", - "tt2369600", - "tt2905772", - "tt0085549", - "tt2457138", - "tt4914580", - "tt0079351", - "tt0062292", - "tt2640474", - "tt7104984", - "tt0084083", - "tt0108432", - "tt3885508", - "tt0057880", - "tt3484324", - "tt6186232", - "tt6803974", - "tt2359417", - "tt0095389", - "tt8116428", - "tt6742252", - "tt6354108", - "tt6053472", - "tt0119744", - "tt2278878", - "tt0075151", - "tt0060453", - "tt2292326", - "tt0828054", - "tt0091042", - "tt0115571", - "tt2741564", - "tt3756788", - "tt0094888", - "tt3253930", - "tt0074148", - "tt0071412", - "tt0105179", - "tt0104083", - "tt2409302", - "tt5221584", - "tt4911940", - "tt5290524", - "tt2006753", - "tt4621872", - "tt3108604", - "tt0088461", - "tt1782440", - "tt5044656", - "tt1979319", - "tt0363226", - "tt3480886", - "tt0021156", - "tt0059635", - "tt4375438", - "tt3384350", - "tt0085601", - "tt1298554", - "tt2425486", - "tt0087796", - "tt0084777", - "tt2650978", - "tt0085404", - "tt0083946", - "tt0056906", - "tt0057379", - "tt6746304", - "tt0114367", - "tt0131636", - "tt0130377", - "tt7475540", - "tt0059942", - "tt0087798", - "tt0057714", - "tt0085764", - "tt1391116", - "tt2691734", - "tt0123334", - "tt1648216", - "tt0057715", - "tt3595848", - "tt0143012", - "tt0199905", - "tt0200309", - "tt0057503", - "tt1555149", - "tt0837800", - "tt0861739", - "tt0092795", - "tt1477855", - "tt1797504", - "tt3532278", - "tt0164984", - "tt0213689", - "tt0123335", - "tt1401236", - "tt0103077", - "tt1260572", - "tt1193507", - "tt0056714", - "tt3796936", - "tt0058001", - "tt2070649", - "tt1541123", - "tt0041735", - "tt0094889", - "tt2394018", - "tt1520956", - "tt3723790", - "tt0191664", - "tt1492959", - "tt0202154", - "tt1572194", - "tt0435434", - "tt6340500", - "tt0049012", - "tt4247682", - "tt1023347", - "tt2215673", - "tt4768656", - "tt2978716", - "tt0076868", - "tt1838475", - "tt2724236", - "tt1743922", - "tt8097306", - "tt1436372", - "tt0090037", - "tt2201251", - "tt0478329", - "tt1981637", - "tt3427772", - "tt0825279", - "tt1748122", - "tt0061882", - "tt0937373", - "tt3701714", - "tt0086102", - "tt3487994", - "tt2375605", - "tt0037514", - "tt3297792", - "tt1287878", - "tt0046359", - "tt0057697", - "tt0817225", - "tt0073589", - "tt9323966", - "tt0456470", - "tt2348394", - "tt0048820", - "tt3404140", - "tt0087464", - "tt0024034", - "tt0058262", - "tt0841150", - "tt0084899", - "tt0041716", - "tt0104770", - "tt0020629", - "tt4374286", - "tt0063173", - "tt2872750", - "tt0045591", - "tt0038824", - "tt0969269", - "tt0098635", - "tt0104771", - "tt0037101", - "tt1449283", - "tt0045537", - "tt2299842", - "tt0028021", - "tt0058715", - "tt0041113", - "tt0164982", - "tt7183578", - "tt3663718", - "tt0038787", - "tt7399158", - "tt0186725", - "tt3424722", - "tt0039689", - "tt0029811", - "tt0045793", - "tt0038669", - "tt0046303", - "tt0032143", - "tt0042788", - "tt0037988", - "tt0039420", - "tt8226904", - "tt0047030", - "tt0164983", - "tt0038890", - "tt0202153", - "tt0042276", - "tt0072439", - "tt0034240", - "tt0201922", - "tt0054749", - "tt0063835", - "tt0054248", - "tt0065778", - "tt0039417", - "tt0102587", - "tt0069704", - "tt0056801", - "tt0040636", - "tt0066603", - "tt0063834", - "tt4457344", - "tt8543788", - "tt2368254", - "tt4189260", - "tt5251438", - "tt0054130", - "tt1606384", - "tt7914416", - "tt0034445", - "tt6411590", - "tt0062518", - "tt2465238", - "tt0913968", - "tt0066602", - "tt0076085", - "tt0373074", - "tt0053134", - "tt0122136", - "tt0110081", - "tt1416336", - "tt0060537", - "tt0053619", - "tt4278962", - "tt1422020", - "tt0346336", - "tt0416044", - "tt0414426", - "tt4482572", - "tt0059459", - "tt0465580", - "tt0460778", - "tt1900893", - "tt3417334", - "tt0039725", - "tt0097074", - "tt1128075", - "tt0053856", - "tt6237268", - "tt1640218", - "tt0070472", - "tt0058279", - "tt1846589", - "tt6118340", - "tt0096152", - "tt5523010", - "tt0110877", - "tt0078801", - "tt0074441", - "tt3530830", - "tt6921996", - "tt7252852", - "tt1916763", - "tt6500934", - "tt1323044", - "tt0061811", - "tt1727252", - "tt2139851", - "tt7167686", - "tt5361064", - "tt0143348", - "tt0047528", - "tt0072157", - "tt0066390", - "tt0091810", - "tt0317248", - "tt0064616", - "tt5612702", - "tt1533117", - "tt3779028", - "tt3205394", - "tt1437357", - "tt0116767", - "tt6127326", - "tt0037508", - "tt2872810", - "tt1811371", - "tt0071358", - "tt1743724", - "tt1079968", - "tt0031507", - "tt0039243", - "tt0282599", - "tt0053062", - "tt0292907", - "tt0023634", - "tt1843840", - "tt1650453", - "tt0053179", - "tt0032842", - "tt0045935", - "tt1876261", - "tt1306964", - "tt0054766", - "tt0387353", - "tt0210587", - "tt0079086", - "tt2756412", - "tt0056010", - "tt1333643", - "tt9059862", - "tt2379386", - "tt0083053", - "tt2131698", - "tt1655441", - "tt0266075", - "tt0370082", - "tt0470967", - "tt0241073", - "tt9556756", - "tt0075276", - "tt1565058", - "tt0301167", - "tt0104376", - "tt0140825", - "tt0080380", - "tt0063198", - "tt0278815", - "tt0034182", - "tt0082700", - "tt3754940", - "tt0054286", - "tt1650407", - "tt1156454", - "tt0418657", - "tt3042800", - "tt0089060", - "tt0478188", - "tt1123894", - "tt4902904", - "tt0037767", - "tt0067327", - "tt0135790", - "tt1773467", - "tt3792452", - "tt2717318", - "tt2622826", - "tt3315380", - "tt0093073", - "tt0074442", - "tt5345298", - "tt3102206", - "tt1065073", - "tt0225535", - "tt8305690", - "tt2465578", - "tt0790604", - "tt0375920", - "tt0038965", - "tt6342062", - "tt9341628", - "tt1111890", - "tt0090887", - "tt0120620", - "tt0093412", - "tt5222918", - "tt0113083", - "tt1588886", - "tt2240312", - "tt4964788", - "tt0066922", - "tt0050803", - "tt0107315", - "tt4411504", - "tt0445336", - "tt3825638", - "tt6098696", - "tt6313378", - "tt2552498", - "tt2188717", - "tt0098360", - "tt6012244", - "tt4025514", - "tt0061176", - "tt0066563", - "tt0079815", - "tt0081001", - "tt0365675", - "tt0083909", - "tt0972857", - "tt4262980", - "tt3849692", - "tt7162416", - "tt1808477", - "tt0100347", - "tt2388705", - "tt0091209", - "tt1547090", - "tt0037280", - "tt3746250", - "tt0071691", - "tt5017936", - "tt1499666", - "tt1203523", - "tt5451118", - "tt0071276", - "tt4285496", - "tt0040766", - "tt0447461", - "tt0037558", - "tt0187696", - "tt2404738", - "tt0312358", - "tt0056606", - "tt8562100", - "tt1291652", - "tt0192757", - "tt6004864", - "tt0307213", - "tt0415679", - "tt1373120", - "tt1535566", - "tt2617828", - "tt0129461", - "tt0286751", - "tt2764784", - "tt0120263", - "tt0108188", - "tt0060135", - "tt5121816", - "tt2178941", - "tt0080436", - "tt0045631", - "tt1588342", - "tt7751192", - "tt0272360", - "tt1719071", - "tt0199683", - "tt0122987", - "tt0079074", - "tt0103704", - "tt0114508", - "tt0058625", - "tt0018455", - "tt0106936", - "tt0049710", - "tt0821442", - "tt0025316", - "tt0050986", - "tt0017925", - "tt0032551", - "tt0109688", - "tt0048579", - "tt0033870", - "tt0047444", - "tt0015324", - "tt3750872", - "tt0881200", - "tt0044741", - "tt7891470", - "tt0196472", - "tt0109592", - "tt4326444", - "tt4971344", - "tt5215952", - "tt0091670", - "tt0084021", - "tt0082176", - "tt0405094", - "tt6730898", - "tt3841424", - "tt1226837", - "tt0055601", - "tt0060637", - "tt0078875", - "tt0308379", - "tt2675914", - "tt4176826", - "tt0108211", - "tt2832470", - "tt0031679", - "tt0042192", - "tt0064513", - "tt0017136", - "tt0095675", - "tt0100998", - "tt5723272", - "tt0951318", - "tt3616916", - "tt1029235", - "tt0095327", - "tt6045466", - "tt0073650", - "tt0063036", - "tt0012349", - "tt0088275", - "tt6020428", - "tt0026029", - "tt0065198", - "tt0032553", - "tt4048272", - "tt0047469", - "tt0046438", - "tt0123648", - "tt0045274", - "tt4682136", - "tt0031650", - "tt0050613", - "tt0050976", - "tt0036112", - "tt0035446", - "tt0093191", - "tt5789976", - "tt0014429", - "tt0040725", - "tt7147540", - "tt5689632", - "tt0065780", - "tt0058652", - "tt7095482", - "tt8601916", - "tt8107464", - "tt0104029", - "tt0053779", - "tt0073076", - "tt0423866", - "tt1740707", - "tt0022100", - "tt0091003", - "tt0093225", - "tt0480669", - "tt0031885", - "tt4494718", - "tt0041154", - "tt0097550", - "tt0347048", - "tt0021810", - "tt5096846", - "tt0365376", - "tt0038762", - "tt0468492", - "tt0097372", - "tt3685870", - "tt3244446", - "tt6869538", - "tt0039192", - "tt0057261", - "tt0083666", - "tt7525514", - "tt0089606", - "tt0034881", - "tt0059895", - "tt0875140", - "tt6409782", - "tt3086442", - "tt0049010", - "tt2078599", - "tt1614989", - "tt0021309", - "tt3011894", - "tt0056709", - "tt0034461", - "tt0056736", - "tt4226388", - "tt6768578", - "tt0024188", - "tt0213847", - "tt0064689", - "tt0961066", - "tt0071129", - "tt1232776", - "tt4834220", - "tt9217772", - "tt0087359", - "tt1153100", - "tt1777612", - "tt2538128", - "tt2140429", - "tt0324572", - "tt9272928", - "tt0063775", - "tt3110770", - "tt2081438", - "tt1376460", - "tt0074776", - "tt2186783", - "tt3920782", - "tt3301196", - "tt0099691", - "tt0093974", - "tt9217732", - "tt1213641", - "tt0874289", - "tt0244283", - "tt0756707", - "tt0067976", - "tt1516002", - "tt2369041", - "tt0087537", - "tt0063678", - "tt1957938", - "tt1663222", - "tt0071566", - "tt1965162", - "tt0787515", - "tt0072886", - "tt1811315", - "tt1577055", - "tt0902967", - "tt1876349", - "tt4472596", - "tt4439102", - "tt1170391", - "tt0085862", - "tt3384904", - "tt1391579", - "tt0087229", - "tt0126848", - "tt2551510", - "tt0128484", - "tt1543459", - "tt0048204", - "tt2381962", - "tt0113429", - "tt4215810", - "tt3743126", - "tt1687889", - "tt0058620", - "tt1716767", - "tt0118799", - "tt7736536", - "tt0084422", - "tt0036940", - "tt0084509", - "tt1807018", - "tt0081344", - "tt5503368", - "tt0082648", - "tt0430239", - "tt0028284", - "tt1175709", - "tt0027166", - "tt9287408", - "tt7546096", - "tt0418879", - "tt6512428", - "tt1531911", - "tt0473393", - "tt7008872", - "tt0903606", - "tt0063808", - "tt1472195", - "tt0265987", - "tt0388473", - "tt1331335", - "tt0083726", - "tt2495104", - "tt0063210", - "tt6223806", - "tt1618445", - "tt0086352", - "tt0353357", - "tt0079727", - "tt0327084", - "tt0062649", - "tt0035153", - "tt5258128", - "tt1368443", - "tt0119592", - "tt0079144", - "tt0038417", - "tt0475286", - "tt6848736", - "tt6162892", - "tt0061094", - "tt0264734", - "tt1562567", - "tt0497432", - "tt0052002", - "tt0082114", - "tt3620762", - "tt1664664", - "tt1550524", - "tt0086050", - "tt5720450", - "tt3221698", - "tt0070337", - "tt5157326", - "tt5580266", - "tt4145324", - "tt0099747", - "tt1686042", - "tt5981304", - "tt2439946", - "tt2784134", - "tt0055230", - "tt2630992", - "tt2437548", - "tt1592576", - "tt0090771", - "tt0056993", - "tt2304517", - "tt2518848", - "tt3477752", - "tt0085248", - "tt2850304", - "tt4000870", - "tt2291606", - "tt1823051", - "tt5664636", - "tt2121377", - "tt0091724", - "tt0270919", - "tt1345734", - "tt3877296", - "tt0071216", - "tt1667418", - "tt0991174", - "tt4028134", - "tt0029030", - "tt0078330", - "tt0301357", - "tt3910814", - "tt3067274", - "tt0108342", - "tt1693679", - "tt2088923", - "tt0070292", - "tt0075913", - "tt3837820", - "tt0417745", - "tt0077421", - "tt2948712", - "tt0098375", - "tt0065224", - "tt0255589", - "tt0068273", - "tt3038142", - "tt2361184", - "tt0087386", - "tt1129427", - "tt1648208", - "tt2797106", - "tt3041550", - "tt0060726", - "tt7689906", - "tt0032080", - "tt0095924", - "tt0053126", - "tt9409846", - "tt4368496", - "tt0114432", - "tt0437072", - "tt0045177", - "tt1453409", - "tt3307774", - "tt0794338", - "tt3698558", - "tt1793223", - "tt0047365", - "tt2825230", - "tt2967578", - "tt1351784", - "tt1835955", - "tt1568139", - "tt3462696", - "tt0085236", - "tt0479773", - "tt1693843", - "tt1307989", - "tt0247613", - "tt0072317", - "tt0084854", - "tt3844876", - "tt3013160", - "tt0780002", - "tt0086113", - "tt0050306", - "tt2088012", - "tt5340882", - "tt1836099", - "tt0029844", - "tt0071935", - "tt0070628", - "tt0120026", - "tt0017668", - "tt1385543", - "tt5736592", - "tt0061420", - "tt0495138", - "tt5502816", - "tt0039294", - "tt3401748", - "tt1640718", - "tt5537686", - "tt0379865", - "tt0080846", - "tt0066212", - "tt0073330", - "tt7073710", - "tt7323600", - "tt5639446", - "tt1544572", - "tt2431332", - "tt0411951", - "tt1072754", - "tt3013528", - "tt0075754", - "tt0053841", - "tt9534518", - "tt1522846", - "tt5095510", - "tt2104837", - "tt1145154", - "tt3307726", - "tt5131906", - "tt0061758", - "tt9105950", - "tt1608368", - "tt0040682", - "tt0101751", - "tt4175888", - "tt1509788", - "tt0046272", - "tt1857842", - "tt4180576", - "tt2991516", - "tt4184252", - "tt6101602", - "tt0061647", - "tt0943326", - "tt0034409", - "tt0037761", - "tt1637728", - "tt2753288", - "tt5782152", - "tt1436432", - "tt0906778", - "tt0039041", - "tt1684555", - "tt6999052", - "tt1366338", - "tt0024727", - "tt0492835", - "tt0053882", - "tt1209378", - "tt1227789", - "tt0097270", - "tt1314652", - "tt7277350", - "tt0047679", - "tt0116447", - "tt4296026", - "tt2217458", - "tt5851014", - "tt0092203", - "tt2308725", - "tt2556114", - "tt1054631", - "tt1937506", - "tt1870527", - "tt0079368", - "tt0043778", - "tt6763252", - "tt0031602", - "tt1626139", - "tt5158522", - "tt0892769", - "tt0064888", - "tt0940642", - "tt1680123", - "tt0475783", - "tt0077617", - "tt2486792", - "tt2123884", - "tt1326238", - "tt0051755", - "tt1733125", - "tt0091990", - "tt2182019", - "tt0075627", - "tt1702429", - "tt1032763", - "tt3598222", - "tt3121332", - "tt1297298", - "tt2518926", - "tt2468774", - "tt0057952", - "tt0083001", - "tt6684884", - "tt3480556", - "tt0120502", - "tt0060708", - "tt0074553", - "tt0081178", - "tt0118117", - "tt0361748", - "tt0105466", - "tt6829180", - "tt1462757", - "tt0062479", - "tt0144239", - "tt0063469", - "tt1447479", - "tt1773020", - "tt4998772", - "tt7875464", - "tt0045465", - "tt2446502", - "tt0082379", - "tt2994948", - "tt0475289", - "tt0082640", - "tt0117193", - "tt0069372", - "tt0034384", - "tt3886076", - "tt0046004", - "tt2199251", - "tt0055200", - "tt0469913", - "tt6543652", - "tt0088402", - "tt0071361", - "tt3069954", - "tt0071198", - "tt5946974", - "tt6346314", - "tt1837574", - "tt2272336", - "tt3032282", - "tt4715356", - "tt1548628", - "tt0066093", - "tt1535565", - "tt2151543", - "tt3044562", - "tt4685096", - "tt1132193", - "tt0050722", - "tt5344794", - "tt0114917", - "tt1419950", - "tt1683970", - "tt0120275", - "tt1846492", - "tt9145818", - "tt0060307", - "tt0057259", - "tt0057608", - "tt1893269", - "tt1478325", - "tt6769280", - "tt0079437", - "tt1844203", - "tt7210348", - "tt0059297", - "tt1694118", - "tt0052896", - "tt1831806", - "tt9029324", - "tt5917576", - "tt1235142", - "tt0115921", - "tt0074226", - "tt0057401", - "tt1619016", - "tt1262413", - "tt0469683", - "tt3399484", - "tt3270108", - "tt3139538", - "tt0120619", - "tt9000560", - "tt6462564", - "tt0119819", - "tt0056478", - "tt0072325", - "tt0090678", - "tt1043844", - "tt4051850", - "tt0084867", - "tt0081764", - "tt0058953", - "tt0996934", - "tt2529918", - "tt9287492", - "tt0058935", - "tt9129734", - "tt0075214", - "tt5890000", - "tt0078490", - "tt0073760", - "tt1993391", - "tt0079227", - "tt0096087", - "tt0089276", - "tt2201532", - "tt3135556", - "tt0075406", - "tt0070694", - "tt0120443", - "tt0113952", - "tt4116030", - "tt0089838", - "tt6502956", - "tt4729754", - "tt7132578", - "tt3279176", - "tt0078067", - "tt3102458", - "tt4973112", - "tt1789810", - "tt1473150", - "tt3977898", - "tt7736144", - "tt0081114", - "tt6417014", - "tt1165293", - "tt2034060", - "tt1764141", - "tt0098373", - "tt0065836", - "tt5950980", - "tt0061913", - "tt0036983", - "tt5048406", - "tt0093235", - "tt2915662", - "tt4576652", - "tt1236471", - "tt0099656", - "tt1934458", - "tt0054938", - "tt4437640", - "tt0094056", - "tt0058384", - "tt0062863", - "tt1448762", - "tt0493076", - "tt1740725", - "tt4146622", - "tt0095022", - "tt6217608", - "tt0044487", - "tt5179598", - "tt0102848", - "tt0092891", - "tt0102212", - "tt4483220", - "tt0088678", - "tt0067388", - "tt0906788", - "tt0098328", - "tt6749318", - "tt0056347", - "tt0068935", - "tt2772092", - "tt1022883", - "tt1827354", - "tt0080100", - "tt3157224", - "tt0105322", - "tt0095990", - "tt2403558", - "tt3663040", - "tt0094834", - "tt0100430", - "tt0098126", - "tt0110777", - "tt0098156", - "tt1533058", - "tt2905674", - "tt1884318", - "tt1540400", - "tt0077594", - "tt0102860", - "tt0084354", - "tt0067824", - "tt7886442", - "tt1679180", - "tt7822178", - "tt4035898", - "tt4269746", - "tt3072732", - "tt0054988", - "tt1934234", - "tt1647483", - "tt7752454", - "tt9547802", - "tt0183306", - "tt3136112", - "tt0068341", - "tt0092809", - "tt0095312", - "tt1756427", - "tt0111218", - "tt0085385", - "tt0040695", - "tt1999890", - "tt3171764", - "tt0079631", - "tt2558318", - "tt8942908", - "tt0780645", - "tt0473075", - "tt1733578", - "tt0102500", - "tt6776106", - "tt1885299", - "tt0685628", - "tt7759626", - "tt0042541", - "tt0093585", - "tt2378191", - "tt2381931", - "tt0089642", - "tt6134274", - "tt5338222", - "tt0092585", - "tt5091014", - "tt1355683", - "tt3622592", - "tt0052564", - "tt1290400", - "tt6993174", - "tt0040834", - "tt0050720", - "tt3125220", - "tt0425743", - "tt0071396", - "tt0043859", - "tt5076792", - "tt0089283", - "tt0033436", - "tt1052040", - "tt4073890", - "tt0037248", - "tt1727885", - "tt0111173", - "tt4060576", - "tt0037166", - "tt0844666", - "tt0039881", - "tt2993848", - "tt0019412", - "tt1124388", - "tt0097670", - "tt1912982", - "tt5255524", - "tt0038492", - "tt1254322", - "tt0046889", - "tt0970926", - "tt0078239", - "tt0114489", - "tt0095877", - "tt0070165", - "tt0097136", - "tt8395220", - "tt0087385", - "tt7690670", - "tt0044533", - "tt8351278", - "tt0012675", - "tt0090729", - "tt0388377", - "tt0048182", - "tt2160105", - "tt1071880", - "tt9033628", - "tt0056279", - "tt1860357", - "tt3774114", - "tt0048667", - "tt1972591", - "tt0491175", - "tt1959563", - "tt0049516", - "tt0100087", - "tt2226597", - "tt6108178", - "tt5439796", - "tt4925292", - "tt4815122", - "tt5109784", - "tt1615160", - "tt2406566", - "tt4547194", - "tt1981128", - "tt1219827", - "tt3640424", - "tt2140479", - "tt3799694", - "tt0101627", - "tt1172998", - "tt2719848", - "tt1853728", - "tt0064747", - "tt0454879", - "tt0101628", - "tt1663202", - "tt0041487", - "tt1386697", - "tt3505712", - "tt3783958", - "tt1355644", - "tt5649108", - "tt3290276", - "tt4975722", - "tt7250206", - "tt1328875", - "tt0060218", - "tt1198408", - "tt1451423", - "tt2992524", - "tt0491046", - "tt2872724", - "tt0082346", - "tt3230660", - "tt0048340", - "tt2395339", - "tt0075783", - "tt0090605", - "tt1446714", - "tt0119116", - "tt0038107", - "tt0093773", - "tt0091173", - "tt0100403", - "tt1473801", - "tt1479847", - "tt0082338", - "tt2600742", - "tt0118583", - "tt0103644", - "tt0370263", - "tt0758730", - "tt1424381", - "tt1468829", - "tt0048216", - "tt0059362", - "tt0936471", - "tt0053290", - "tt0097911", - "tt0060120", - "tt1694508", - "tt1764647", - "tt9182676", - "tt0481390", - "tt0093011", - "tt0085693", - "tt0090881", - "tt0049414", - "tt0104522", - "tt4938050", - "tt0083941", - "tt1127221", - "tt3328716", - "tt0094962", - "tt0063456", - "tt0765487", - "tt0032983", - "tt0088333", - "tt5843670", - "tt1119123", - "tt2638662", - "tt1164647", - "tt3532216", - "tt0110689", - "tt1459013", - "tt5776858", - "tt5362988", - "tt7137846", - "tt1413492", - "tt2239822", - "tt5478478", - "tt1389072", - "tt1961175", - "tt3780500", - "tt2345759", - "tt0847520", - "tt3894312", - "tt4686844", - "tt7784604", - "tt0034162", - "tt5613484", - "tt0988083", - "tt6421110", - "tt7969042", - "tt5164432", - "tt1692098", - "tt4209788", - "tt0081607", - "tt0094801", - "tt2543472", - "tt1881060", - "tt1705134", - "tt0031121", - "tt7786540", - "tt4555426", - "tt2800050", - "tt1365519", - "tt3195742", - "tt1840309", - "tt0070072", - "tt2908446", - "tt6499752", - "tt2704998", - "tt1951264", - "tt3410834", - "tt3263904", - "tt2854926", - "tt5834262", - "tt1951266", - "tt1951265", - "tt1392170", - "tt3411444", - "tt2709768", - "tt1343097", - "tt0803096", - "tt2802144", - "tt0090342", - "tt1216487", - "tt1772341", - "tt2094766", - "tt0089177", - "tt2980516", - "tt2404435", - "tt1132620", - "tt1568346", - "tt4649466", - "tt5052474", - "tt0085980", - "tt3521126", - "tt4500922", - "tt0076809", - "tt3731562", - "tt3397884", - "tt2119532", - "tt5726616", - "tt2740710", - "tt0069792", - "tt0039757", - "tt3602128", - "tt2051894", - "tt0064952", - "tt0115832", - "tt0093029", - "tt1828959", - "tt0082818", - "tt2307002", - "tt0048064", - "tt5686132", - "tt1104126", - "tt0052293", - "tt0083629", - "tt3153582", - "tt0120755", - "tt1545315", - "tt1384927", - "tt1229238", - "tt3076658", - "tt0117060", - "tt1172060", - "tt4630444", - "tt0107290", - "tt0163025", - "tt0119567", - "tt0317919", - "tt4566574", - "tt5758778", - "tt0369610", - "tt3766354", - "tt0455944", - "tt2380307", - "tt2381249", - "tt0038455", - "tt1825683", - "tt5164214", - "tt3152098", - "tt1686018", - "tt0023049", - "tt1510686", - "tt4912910", - "tt1781840", - "tt3183660", - "tt3018070", - "tt0107978", - "tt0070622", - "tt0066450", - "tt1136684", - "tt0258463", - "tt4881806", - "tt0372183", - "tt1194173", - "tt1071875", - "tt0100502", - "tt1663662", - "tt2557478", - "tt0259324", - "tt0967945", - "tt0440963", - "tt0408961", - "tt0475298", - "tt2378453", - "tt0084445", - "tt2290739", - "tt0063557", - "tt1714866", - "tt8851036", - "tt9083646", - "tt0166370", - "tt0376994", - "tt0339334", - "tt8805150", - "tt1709652", - "tt0092133", - "tt0020691", - "tt1327788", - "tt0047795", - "tt3499458", - "tt0181852", - "tt0029808", - "tt1877832", - "tt1270798", - "tt0290334", - "tt0120903", - "tt0037024", - "tt0045094", - "tt0458525", - "tt6615240", - "tt0088247", - "tt0450314", - "tt0031334", - "tt0107606", - "tt0454839", - "tt5709188", - "tt0103064", - "tt1340138", - "tt3680410", - "tt0978764", - "tt0187738", - "tt0120611", - "tt0359013", - "tt0330793", - "tt0401792", - "tt0033028", - "tt0458481", - "tt0800080", - "tt0346156", - "tt0086203", - "tt0097001", - "tt0077235", - "tt0067633", - "tt1241329", - "tt1054478", - "tt1981140", - "tt0100201", - "tt0075147", - "tt0463027", - "tt0029725", - "tt0045205", - "tt0095330", - "tt0341376", - "tt0044905", - "tt0023303", - "tt0113808", - "tt0044744", - "tt0029929", - "tt0070928", - "tt0056016", - "tt3315342", - "tt3333870", - "tt3491962", - "tt5095030", - "tt0040427", - "tt0028980", - "tt0031252", - "tt2341664", - "tt1396484", - "tt0102522", - "tt2544734", - "tt3501632", - "tt0089006", - "tt0068458", - "tt3896198", - "tt1074214", - "tt3627704", - "tt0039776", - "tt1431191", - "tt0320661", - "tt0332452", - "tt0407304", - "tt0187393", - "tt0325710", - "tt0095738", - "tt0021814", - "tt0120201", - "tt3393786", - "tt0816711", - "tt1276104", - "tt0848228", - "tt4154756", - "tt0790724", - "tt1371111", - "tt1785669", - "tt2395427", - "tt0101273", - "tt1483013", - "tt0171410", - "tt0037793", - "tt2713180", - "tt1535108", - "tt0215750", - "tt0369339", - "tt1253863", - "tt0061787", - "tt0343818", - "tt0075860", - "tt0416449", - "tt8367080", - "tt5039088", - "tt0040558", - "tt6708116", - "tt0338097", - "tt0031322", - "tt0090585", - "tt0044789", - "tt0093608", - "tt0497030", - "tt0090644", - "tt0079501", - "tt0451279", - "tt2231461", - "tt3890160", - "tt5580036", - "tt0217869", - "tt5580390", - "tt4972582", - "tt9168416", - "tt0082694", - "tt5027774", - "tt0974015", - "tt1375666", - "tt2283362", - "tt1509787", - "tt5013056", - "tt0089530", - "tt1677720", - "tt0993846", - "tt0046899", - "tt1706620", - "tt1827579", - "tt0095296", - "tt8862524", - "tt1884495", - "tt3271700", - "tt3659388", - "tt1935089", - "tt0059410", - "tt1542482", - "tt0114746", - "tt1454468", - "tt0470752", - "tt2507280", - "tt1136608", - "tt1392190", - "tt2081194", - "tt0816692", - "tt0083658", - "tt3694790", - "tt1477859", - "tt4264426", - "tt0082948", - "tt2798920", - "tt2543164", - "tt2782844", - "tt0127919", - "tt0067921", - "tt1856101", - "tt0876233", - "tt3661298", - "tt0901481", - "tt0075359", - "tt1191971", - "tt0073349", - "tt0092842", - "tt1637976", - "tt0114788", - "tt3541080", - "tt0088044", - "tt1730687", - "tt9413164", - "tt5862902", - "tt2184287", - "tt0100666", - "tt0301924", - "tt0105481", - "tt0092117", - "tt0108592", - "tt0043118", - "tt2284766", - "tt2911674", - "tt0817228", - "tt0067991", - "tt0056368", - "tt0874271", - "tt0050095", - "tt2572632", - "tt0092669", - "tt0074540", - "tt9202096", - "tt1120945", - "tt0354595", - "tt8420670", - "tt5434870", - "tt0026781", - "tt0030944", - "tt9168384", - "tt9217716", - "tt0068264", - "tt0027414", - "tt0110857", - "tt0059956", - "tt0089822", - "tt0110622", - "tt0102510", - "tt1886644", - "tt1285010", - "tt0087928", - "tt0093756", - "tt1829744", - "tt9021374", - "tt1235807", - "tt0446722", - "tt0098105", - "tt0095882", - "tt0091777", - "tt4911996", - "tt0095705", - "tt0073011", - "tt0126029", - "tt0298148", - "tt0268380", - "tt0438097", - "tt1080016", - "tt1667889", - "tt5951164", - "tt0892791", - "tt0413267", - "tt0092860", - "tt0084745", - "tt4048668", - "tt0099128", - "tt1270114", - "tt1991031", - "tt5156910", - "tt0092085", - "tt0109906", - "tt1220706", - "tt0105483", - "tt7040874", - "tt7521990", - "tt2557276", - "tt0084737", - "tt0061398", - "tt1989485", - "tt1673645", - "tt9315426", - "tt3727824", - "tt0078346", - "tt0081573", - "tt0092007", - "tt0102975", - "tt3923388", - "tt0074593", - "tt3904278", - "tt0111280", - "tt0086946", - "tt0348150", - "tt0098382", - "tt0086393", - "tt0084827", - "tt0094074", - "tt0079945", - "tt0088170", - "tt0120844", - "tt0253754", - "tt0084726", - "tt2315596", - "tt0340110", - "tt0796366", - "tt1661220", - "tt0812352", - "tt2364842", - "tt0117731", - "tt8561672", - "tt1408101", - "tt0099578", - "tt7690762", - "tt0082935", - "tt6069668", - "tt1699180", - "tt1819603", - "tt0332344", - "tt4446472", - "tt3278224", - "tt4795546", - "tt4895668", - "tt0839938", - "tt0385705", - "tt2660888", - "tt1821427", - "tt0082350", - "tt3014284", - "tt0105839", - "tt0770828", - "tt0066927", - "tt2226519", - "tt1680138", - "tt0054038", - "tt0477347", - "tt4550420", - "tt0064928", - "tt2758904", - "tt1078912", - "tt2692250", - "tt4116284", - "tt2881698", - "tt1490017", - "tt2082415", - "tt0108339", - "tt0076227", - "tt1788383", - "tt4158624", - "tt0092156", - "tt1376195", - "tt4859032", - "tt0103285", - "tt0091604", - "tt0076915", - "tt0098193", - "tt3208026", - "tt0119723", - "tt0100797", - "tt0329737", - "tt3922816", - "tt0050972", - "tt0060200", - "tt0115530", - "tt3411432", - "tt0316654", - "tt0232500", - "tt1872181", - "tt0413300", - "tt9033640", - "tt0463985", - "tt1485749", - "tt0322259", - "tt0104418", - "tt6182908", - "tt0948470", - "tt1930463", - "tt0056331", - "tt3244992", - "tt4630562", - "tt0084408", - "tt2250912", - "tt0145487", - "tt0102690", - "tt0116033", - "tt0790627", - "tt1399103", - "tt0318374", - "tt0120912", - "tt0800226", - "tt4119278", - "tt3317208", - "tt2109248", - "tt0119654", - "tt0418279", - "tt0378194", - "tt3371366", - "tt1055369", - "tt1480285", - "tt1409024", - "tt0266697", - "tt0134847", - "tt0296572", - "tt1411250", - "tt0101625", - "tt0856778", - "tt0068909", - "tt1489167", - "tt0064916", - "tt1139319", - "tt0075774", - "tt7586752", - "tt3530978", - "tt2448584", - "tt0089629", - "tt0018394", - "tt2991296", - "tt0107594", - "tt6257174", - "tt0097458", - "tt0016373", - "tt1300159", - "tt0446463", - "tt0042210", - "tt2885628", - "tt0172156", - "tt1659216", - "tt5314190", - "tt0065163", - "tt0066745", - "tt0071562", - "tt0940580", - "tt0795361", - "tt0112442", - "tt8632862", - "tt0099674", - "tt1032817", - "tt4238858", - "tt2198956", - "tt5989220", - "tt0107863", - "tt0068646", - "tt0067672", - "tt0077914", - "tt1048159", - "tt2173024", - "tt0491162", - "tt0098090", - "tt9424594", - "tt2573858", - "tt1937339", - "tt1718158", - "tt0093828", - "tt0080130", - "tt5702446", - "tt2226495", - "tt1753496", - "tt1541995", - "tt0100369", - "tt5776208", - "tt3482378", - "tt0280490", - "tt9059806", - "tt1174954", - "tt5834588", - "tt0082971", - "tt0097576", - "tt0031345", - "tt0109443", - "tt1065106", - "tt0087469", - "tt0144142", - "tt1986857", - "tt0367882", - "tt0025922", - "tt0024773", - "tt0025029", - "tt0058743", - "tt0952640", - "tt0025842", - "tt0067570", - "tt0027031", - "tt0068370", - "tt0024162", - "tt0027397", - "tt0026102", - "tt0026111", - "tt0024534", - "tt0027782", - "tt0026037", - "tt0025071", - "tt0028119", - "tt0027448", - "tt0024461", - "tt0064002", - "tt0094293", - "tt0059377", - "tt0079268", - "tt0892109", - "tt0074573", - "tt0072824", - "tt0076342", - "tt0070444", - "tt0071096", - "tt0088242", - "tt1753968", - "tt1712578", - "tt0088763", - "tt0069006", - "tt0091981", - "tt9225108", - "tt0083000", - "tt9344200", - "tt0328031", - "tt1790809", - "tt0099088", - "tt0238414", - "tt0424279", - "tt0107920", - "tt8273258", - "tt1988781", - "tt2071491", - "tt0096874", - "tt0064107", - "tt5302848", - "tt6608138", - "tt0133093", - "tt3836512", - "tt5989218", - "tt5829040", - "tt0234215", - "tt0069289", - "tt5359422", - "tt0242653", - "tt0903624", - "tt2527336", - "tt3311988", - "tt1170358", - "tt0081186", - "tt3778644", - "tt1693872", - "tt8108198", - "tt2310332", - "tt6280608", - "tt6892218", - "tt6390580", - "tt7785090", - "tt8164806", - "tt1013542", - "tt0039589", - "tt4733536", - "tt2565938", - "tt0067952", - "tt3766424", - "tt0040064", - "tt0071824", - "tt0038908", - "tt1220220", - "tt0082332", - "tt0101988", - "tt8830236", - "tt8497680", - "tt2340678", - "tt2616880", - "tt1183733", - "tt9028856", - "tt3608646", - "tt5937770", - "tt0115885", - "tt2321502", - "tt0061405", - "tt0045152", - "tt0051433", - "tt0051786", - "tt0457939", - "tt0809931", - "tt0790663", - "tt2396436", - "tt4254584", - "tt0087805", - "tt9028866", - "tt0120663", - "tt1424003", - "tt1027820", - "tt1615075", - "tt2421662", - "tt0374248", - "tt1781812", - "tt5973626", - "tt4163668", - "tt0138487", - "tt0069121", - "tt0049471", - "tt2967008", - "tt1790869", - "tt1296869", - "tt0116827", - "tt1486670", - "tt7945822", - "tt6228942", - "tt0086192", - "tt3560148", - "tt5815492", - "tt1675161", - "tt0133745", - "tt3824386", - "tt0060214", - "tt3755844", - "tt0027767", - "tt3116154", - "tt8942494", - "tt0165819", - "tt3138558", - "tt0031209", - "tt0036206", - "tt0185578", - "tt0026497", - "tt0033146", - "tt0220558", - "tt0228406", - "tt0031910", - "tt0242535", - "tt1038685", - "tt0243319", - "tt0061791", - "tt0452660", - "tt0076191", - "tt9028872", - "tt0108052", - "tt1562899", - "tt6042392", - "tt2328549", - "tt1259998", - "tt0075194", - "tt0038119", - "tt0082353", - "tt0054476", - "tt1124040", - "tt2141773", - "tt3829266", - "tt0215090", - "tt2119543", - "tt0112438", - "tt0049875", - "tt0075989", - "tt2996648", - "tt4207196", - "tt3478232", - "tt2055709", - "tt2751310", - "tt1135500", - "tt7981492", - "tt1487931", - "tt9179182", - "tt1117646", - "tt9101480", - "tt0486321", - "tt0091575", - "tt9058902", - "tt2041488", - "tt5456798", - "tt0102849", - "tt0054152", - "tt7905466", - "tt3405434", - "tt6859762", - "tt3700804", - "tt2091325", - "tt2268419", - "tt1858481", - "tt3300572", - "tt0097910", - "tt0059125", - "tt1136683", - "tt0022397", - "tt1219836", - "tt1958043", - "tt0036431", - "tt7999950", - "tt0094033", - "tt1376213", - "tt3148834", - "tt0044672", - "tt0114108", - "tt7605066", - "tt0036696", - "tt0094669", - "tt0025318", - "tt0036230", - "tt0023507", - "tt0400771", - "tt0042825", - "tt0995845", - "tt0021840", - "tt0115610", - "tt7833914", - "tt0044320", - "tt1754109", - "tt2404437", - "tt0074937", - "tt0077272", - "tt0095037", - "tt9102152", - "tt3719896", - "tt7872704", - "tt0063592", - "tt0160620", - "tt0036241", - "tt0050839", - "tt4743226", - "tt2814362", - "tt0102603", - "tt0319829", - "tt1323605", - "tt6852872", - "tt6997426", - "tt4074928", - "tt1368858", - "tt0093894", - "tt6205872", - "tt4971408", - "tt0048215", - "tt1014801", - "tt1265998", - "tt0077247", - "tt6337994", - "tt0465940", - "tt2781832", - "tt1906329", - "tt0369918", - "tt6040662", - "tt0056255", - "tt0065593", - "tt0447854", - "tt0054777", - "tt1714833", - "tt0416243", - "tt0053559", - "tt1844770", - "tt1651323", - "tt9059048", - "tt2663812", - "tt0462219", - "tt0149723", - "tt2093977", - "tt0076210", - "tt0102411", - "tt0970462", - "tt3397918", - "tt0076704", - "tt0311110", - "tt0080057", - "tt0072705", - "tt0240219", - "tt0371823", - "tt0257778", - "tt0050084", - "tt1068953", - "tt0349889", - "tt1160317", - "tt1060255", - "tt0095532", - "tt1992258", - "tt0085678", - "tt6592124", - "tt1014806", - "tt1094198", - "tt0477072", - "tt2617456", - "tt0082226", - "tt8382192", - "tt0330691", - "tt0059221", - "tt0046683", - "tt2352802", - "tt0910865", - "tt3128900", - "tt0425253", - "tt4560436", - "tt0307920", - "tt0903135", - "tt1340161", - "tt2394029", - "tt0419724", - "tt0083015", - "tt2043993", - "tt8990334", - "tt0220099", - "tt0097243", - "tt0117057", - "tt8359636", - "tt0035320", - "tt1586261", - "tt0462477", - "tt0063060", - "tt0055152", - "tt1772271", - "tt6595908", - "tt0096324", - "tt0291082", - "tt2111392", - "tt0075704", - "tt7339792", - "tt0958860", - "tt2521436", - "tt3642508", - "tt0381601", - "tt0107212", - "tt1673734", - "tt0783515", - "tt5437928", - "tt0114070", - "tt9033308", - "tt5160938", - "tt0050622", - "tt0996967", - "tt6905442", - "tt5691670", - "tt6850820", - "tt5843780", - "tt2904626", - "tt1711018", - "tt0076535", - "tt4106376", - "tt0111194", - "tt1135095", - "tt1935065", - "tt1799508", - "tt2577172", - "tt1107816", - "tt0119114", - "tt0130236", - "tt1216515", - "tt4191702", - "tt3110960", - "tt0106579", - "tt0071233", - "tt0080771", - "tt0096046", - "tt9028942", - "tt1414361", - "tt1418712", - "tt9067272", - "tt0458438", - "tt2241403", - "tt0070030", - "tt7222304", - "tt0097579", - "tt0086998", - "tt0059821", - "tt1959409", - "tt3791496", - "tt0073260", - "tt7701808", - "tt0071508", - "tt0095489", - "tt0061810", - "tt0049030", - "tt0095215", - "tt0452692", - "tt2306786", - "tt1682246", - "tt4381236", - "tt2767266", - "tt1876547", - "tt0112637", - "tt7460806", - "tt1663187", - "tt2708254", - "tt0051758", - "tt1230213", - "tt1945044", - "tt0092576", - "tt1576440", - "tt1639826", - "tt0028070", - "tt0029747", - "tt8765496", - "tt5814060", - "tt2904608", - "tt1458915", - "tt0096054", - "tt0023613", - "tt0023858", - "tt0109219", - "tt0020643", - "tt0024601", - "tt0057128", - "tt0119095", - "tt4649416", - "tt0022251", - "tt0114609", - "tt4662420", - "tt0029923", - "tt0091472", - "tt0403692", - "tt1568341", - "tt0104779", - "tt1214983", - "tt1129428", - "tt2396333", - "tt0079489", - "tt1707380", - "tt0783608", - "tt0243017", - "tt1347521", - "tt1087578", - "tt0076221", - "tt0108149", - "tt0013427", - "tt0110638", - "tt1827487", - "tt0461795", - "tt0094964", - "tt1029134", - "tt0102800", - "tt2191612", - "tt0116654", - "tt0115658", - "tt3659786", - "tt0071454", - "tt0097987", - "tt0073298", - "tt0060597", - "tt0138414", - "tt0118623", - "tt0173498", - "tt3499424", - "tt2387408", - "tt1587807", - "tt2027136", - "tt1085507", - "tt3923662", - "tt1773753", - "tt0088850", - "tt1615091", - "tt0098068", - "tt2555426", - "tt4281724", - "tt0058530", - "tt0051978", - "tt0057225", - "tt0091055", - "tt1488181", - "tt0193560", - "tt0097883", - "tt1629242", - "tt4061010", - "tt0340331", - "tt1563719", - "tt0046198", - "tt6603812", - "tt2130270", - "tt0086999", - "tt8092252", - "tt0104053", - "tt6302160", - "tt5979872", - "tt0083591", - "tt0974583", - "tt0083564", - "tt0109348", - "tt3399896", - "tt0283503", - "tt0448564", - "tt1830713", - "tt0395571", - "tt0084945", - "tt0846308", - "tt1176161", - "tt0197467", - "tt1465505", - "tt0383353", - "tt1270286", - "tt0085863", - "tt6921076", - "tt7057496", - "tt0061439", - "tt3733678", - "tt0052646", - "tt0092105", - "tt0422783", - "tt2474972", - "tt6747420", - "tt1781781", - "tt1865346", - "tt1568337", - "tt4034452", - "tt0100469", - "tt0094961", - "tt0055207", - "tt1029241", - "tt0077248", - "tt0760187", - "tt1650535", - "tt2845578", - "tt0089981", - "tt0974554", - "tt0075462", - "tt0857295", - "tt0091110", - "tt2824852", - "tt1711458", - "tt1658797", - "tt8088944", - "tt1764625", - "tt1879012", - "tt0089385", - "tt0078350", - "tt6859352", - "tt0643110", - "tt1001562", - "tt1512240", - "tt1738387", - "tt1233192", - "tt0076644", - "tt2140671", - "tt1753422", - "tt1121786", - "tt6690310", - "tt0091178", - "tt0062185", - "tt0484831", - "tt0397853", - "tt1147684", - "tt3273644", - "tt0489244", - "tt3107070", - "tt0643102", - "tt1270291", - "tt0643107", - "tt0084096", - "tt2215267", - "tt2948078", - "tt0433963", - "tt2295564", - "tt1403862", - "tt0094135", - "tt5307272", - "tt1018723", - "tt4771896", - "tt7014382", - "tt0102984", - "tt0087197", - "tt0080180", - "tt6680312", - "tt1582271", - "tt2229511", - "tt1783285", - "tt0090366", - "tt1244658", - "tt4265508", - "tt5457454", - "tt1100053", - "tt1003034", - "tt2463512", - "tt0053363", - "tt7188948", - "tt0446719", - "tt2043757", - "tt0094357", - "tt4547120", - "tt0070531", - "tt4155144", - "tt9033636", - "tt8655708", - "tt0068649", - "tt3514532", - "tt1446072", - "tt0289944", - "tt1880399", - "tt2224004", - "tt0252444", - "tt0109306", - "tt0100211", - "tt0086423", - "tt0085475", - "tt0791303", - "tt0829176", - "tt2097331", - "tt0095177", - "tt3339674", - "tt0065491", - "tt1258137", - "tt0896529", - "tt1142798", - "tt3114132", - "tt3576728", - "tt0060782", - "tt1817676", - "tt1235837", - "tt0071866", - "tt7365604", - "tt0287535", - "tt0094048", - "tt2011276", - "tt0419358", - "tt0062430", - "tt0029322", - "tt2165859", - "tt2392326", - "tt0116671", - "tt0082146", - "tt2962726", - "tt1510906", - "tt2395417", - "tt4176928", - "tt6848114", - "tt0088001", - "tt1694021", - "tt0434215", - "tt6725014", - "tt0074292", - "tt0386588", - "tt0082801", - "tt0051365", - "tt1183911", - "tt1268809", - "tt6470762", - "tt7880466", - "tt0110357", - "tt0985058", - "tt0106873", - "tt0110667", - "tt0060635", - "tt3254930", - "tt5017060", - "tt3330764", - "tt2544472", - "tt1086216", - "tt0914837", - "tt5325452", - "tt0046345", - "tt0060827", - "tt8564902", - "tt2395385", - "tt3703908", - "tt0041827", - "tt6686358", - "tt5275884", - "tt0080421", - "tt0075931", - "tt0075809", - "tt0977214", - "tt9053906", - "tt2386278", - "tt0758781", - "tt0056891", - "tt0031790", - "tt0093072", - "tt3451984", - "tt1661099", - "tt0077215", - "tt5240090", - "tt3525168", - "tt0050439", - "tt0101701", - "tt1667355", - "tt5740866", - "tt7250466", - "tt0053418", - "tt0091276", - "tt1838520", - "tt0052870", - "tt7784788", - "tt0118692", - "tt0104299", - "tt0099091", - "tt4552524", - "tt1837636", - "tt3978720", - "tt0098453", - "tt1697064", - "tt3671542", - "tt0893532", - "tt0076683", - "tt7830888", - "tt3688406", - "tt0417395", - "tt1169809", - "tt0091757", - "tt0119906", - "tt2093270", - "tt0058085", - "tt2272350", - "tt0108442", - "tt0870211", - "tt7736104", - "tt2483208", - "tt0060472", - "tt6987770", - "tt1381767", - "tt0466731", - "tt3533916", - "tt6591652", - "tt2978462", - "tt1071812", - "tt2314824", - "tt2141751", - "tt0948547", - "tt5012394", - "tt2025667", - "tt3816458", - "tt6444140", - "tt7117354", - "tt1986994", - "tt0100973", - "tt7649320", - "tt0066826", - "tt4129870", - "tt2279922", - "tt5481404", - "tt7160176", - "tt5940342", - "tt0079672", - "tt4651410", - "tt3774802", - "tt0102900", - "tt0064615", - "tt0048491", - "tt7473032", - "tt3208936", - "tt8586880", - "tt1792647", - "tt0119484", - "tt0103295", - "tt1555093", - "tt6190348", - "tt0059711", - "tt0063056", - "tt5259598", - "tt6622902", - "tt0090849", - "tt0062909", - "tt0190861", - "tt7393746", - "tt1132130", - "tt0059127", - "tt0064110", - "tt9058820", - "tt0068309", - "tt0938305", - "tt1507563", - "tt1034325", - "tt0063991", - "tt0073896", - "tt0426627", - "tt0064117", - "tt8443810", - "tt0432289", - "tt0105655", - "tt0065073", - "tt0086058", - "tt2088893", - "tt5433884", - "tt0082096", - "tt0082951", - "tt2182972", - "tt1588170", - "tt0768222", - "tt8235660", - "tt1436045", - "tt0363163", - "tt0075132", - "tt4258698", - "tt0090738", - "tt0470000", - "tt0066184", - "tt1133993", - "tt2933474", - "tt0038348", - "tt0110916", - "tt0120610", - "tt4961380", - "tt0047167", - "tt0063759", - "tt3280916", - "tt0063611", - "tt0043048", - "tt0095927", - "tt0094799", - "tt0048641", - "tt0053772", - "tt0044811", - "tt4083572", - "tt7220696", - "tt0073822", - "tt0044060", - "tt7599050", - "tt1645089", - "tt0164052", - "tt0064793", - "tt2330322", - "tt9028802", - "tt8805246", - "tt0087193", - "tt0076686", - "tt8694374", - "tt0076299", - "tt9033632", - "tt0066049", - "tt8734822", - "tt1504467", - "tt0098143", - "tt0050280", - "tt2170427", - "tt0085542", - "tt7543904", - "tt0092746", - "tt1726661", - "tt6728096", - "tt9178222", - "tt0071519", - "tt0804552", - "tt0107818", - "tt0100639", - "tt0099611", - "tt1560970", - "tt8638638", - "tt1418754", - "tt0077889", - "tt0120757", - "tt0102460", - "tt1707392", - "tt0047647", - "tt0107004", - "tt0314676", - "tt0458455", - "tt0093996", - "tt0065738", - "tt5946128", - "tt0097889", - "tt1138489", - "tt0984200", - "tt0067541", - "tt0280707", - "tt3878542", - "tt2885364", - "tt1220628", - "tt0116015", - "tt7286916", - "tt0067334", - "tt0158493", - "tt0071282", - "tt0075261", - "tt1976989", - "tt2554270", - "tt2972362", - "tt0082340", - "tt0408268", - "tt3104988", - "tt1786668", - "tt0070284", - "tt0097967", - "tt2659414", - "tt2106670", - "tt0139151", - "tt9033646", - "tt2224455", - "tt3300980", - "tt0090837", - "tt0109369", - "tt0106500", - "tt0040229", - "tt1083845", - "tt1929308", - "tt0098057", - "tt1977895", - "tt0091772", - "tt2049543", - "tt0052905", - "tt0074157", - "tt7668870", - "tt0086863", - "tt0098519", - "tt2390253", - "tt8031554", - "tt2132405", - "tt0294929", - "tt0052017", - "tt2168910", - "tt1319704", - "tt0080923", - "tt3289712", - "tt4419364", - "tt0107529", - "tt0048272", - "tt3451230", - "tt0103747", - "tt0082242", - "tt0243255", - "tt1541874", - "tt0804507", - "tt2357377", - "tt1718903", - "tt0029087", - "tt1104083", - "tt4144190", - "tt0032699", - "tt6017942", - "tt2343617", - "tt2458106", - "tt0299478", - "tt0116684", - "tt0109552", - "tt4375268", - "tt7681824", - "tt6915100", - "tt5153288", - "tt8755316", - "tt1703048", - "tt1817771", - "tt0084814", - "tt4982870", - "tt0384814", - "tt2315152", - "tt1436559", - "tt0050396", - "tt1020543", - "tt0058124", - "tt6315800", - "tt6556890", - "tt1294969", - "tt9372544", - "tt0435653", - "tt0080397", - "tt0143010", - "tt0416499", - "tt5931802", - "tt0118744", - "tt0117177", - "tt3008014", - "tt0085346", - "tt0030589", - "tt0083987", - "tt6751670", - "tt0123328", - "tt0158489", - "tt0082031", - "tt0030786", - "tt0028325", - "tt0080913", - "tt0094678", - "tt0804505", - "tt0051362", - "tt7535288", - "tt0102303", - "tt6760562", - "tt3908142", - "tt2351310", - "tt0044426", - "tt0088393", - "tt0028389", - "tt2969458", - "tt0031398", - "tt0075148", - "tt7468056", - "tt0105636", - "tt0090065", - "tt0053291", - "tt2962876", - "tt0119324", - "tt7545566", - "tt0117803", - "tt0079700", - "tt0088322", - "tt4065842", - "tt8544568", - "tt3233418", - "tt0119642", - "tt5934564", - "tt2576522", - "tt0104926", - "tt5847286", - "tt0113269", - "tt4935372", - "tt0061613", - "tt3477554", - "tt0116005", - "tt0104530", - "tt0116322", - "tt0054279", - "tt2290840", - "tt0063694", - "tt0099768", - "tt9033634", - "tt0072813", - "tt9103602", - "tt2625030", - "tt1832381", - "tt4591840", - "tt8022676", - "tt0092925", - "tt0096426", - "tt1632547", - "tt0254455", - "tt2828840", - "tt0098967", - "tt0095765", - "tt0097239", - "tt0140581", - "tt3411034", - "tt1031254", - "tt0385004", - "tt0367188", - "tt5990474", - "tt0048937", - "tt0065492", - "tt0100442", - "tt0033582", - "tt0104321", - "tt4578910", - "tt0109424", - "tt2948790", - "tt3551840", - "tt2526514", - "tt0113613", - "tt0058430", - "tt1278340", - "tt0041374", - "tt0455805", - "tt0030192", - "tt0044541", - "tt0119250", - "tt2944198", - "tt0066830", - "tt0260991", - "tt0478024", - "tt0462395", - "tt0445935", - "tt1308728", - "tt0365885", - "tt0120520", - "tt0992911", - "tt0094035", - "tt1038043", - "tt6145612", - "tt0368658", - "tt0819787", - "tt6014166", - "tt0400525", - "tt0085125", - "tt0112702", - "tt0086450", - "tt1267379", - "tt1231287", - "tt0457275", - "tt0105459", - "tt0068786", - "tt4324302", - "tt0075925", - "tt0428251", - "tt1188113", - "tt1059925", - "tt0080513", - "tt2429074", - "tt2215285", - "tt0082806", - "tt2483260", - "tt0290212", - "tt0110647", - "tt1756489", - "tt4930228", - "tt6890836", - "tt0085154", - "tt0490076", - "tt0100029", - "tt0117364", - "tt0097390", - "tt7561086", - "tt7133648", - "tt1220214", - "tt1430626", - "tt0087759", - "tt6957966", - "tt3120408", - "tt0093624", - "tt6224502", - "tt0034303", - "tt3956336", - "tt1185266", - "tt1216516", - "tt1390535", - "tt0086176", - "tt0438859", - "tt0106761", - "tt1932745", - "tt1535612", - "tt1071358", - "tt0088024", - "tt0195968", - "tt1777034", - "tt0455612", - "tt0081506", - "tt1578882", - "tt1258157", - "tt1247662", - "tt2234429", - "tt0070698", - "tt1989511", - "tt0089153", - "tt0086973", - "tt0119272", - "tt0076929", - "tt0066301", - "tt0094138", - "tt0108526", - "tt6085174", - "tt1045655", - "tt0806027", - "tt0974014", - "tt1097013", - "tt3216348", - "tt0119214", - "tt0497323", - "tt2032572", - "tt0093565", - "tt3774790", - "tt4009278", - "tt0081974", - "tt0102351", - "tt1016075", - "tt4244998", - "tt1514041", - "tt0472071", - "tt0395251", - "tt0482603", - "tt2282016", - "tt2903900", - "tt1845806", - "tt1133991", - "tt1981107", - "tt7476494", - "tt0497972", - "tt0246464", - "tt0050192", - "tt7668724", - "tt1097643", - "tt4779682", - "tt1452628", - "tt0275230", - "tt0083630", - "tt4461960", - "tt3387648", - "tt0865559", - "tt0489282", - "tt0295289", - "tt3552620", - "tt0960890", - "tt0492650", - "tt0780607", - "tt0211465", - "tt5761646", - "tt2039345", - "tt1427298", - "tt1175506", - "tt0086617", - "tt2773246", - "tt0409345", - "tt4193394", - "tt1161418", - "tt1646876", - "tt0081777", - "tt0775552", - "tt0763840", - "tt0094739", - "tt2403029", - "tt0061809", - "tt0070294", - "tt0902290", - "tt1142800", - "tt5690360", - "tt2106361", - "tt0892767", - "tt0961728", - "tt1046997", - "tt0095740", - "tt0084809", - "tt0099512", - "tt0053925", - "tt0893402", - "tt1483025", - "tt0092974", - "tt0156812", - "tt0090568", - "tt0783532", - "tt0466856", - "tt4019560", - "tt7057306", - "tt0780534", - "tt0111481", - "tt0274711", - "tt0112750", - "tt0111001", - "tt0389328", - "tt0054850", - "tt1757746", - "tt0829188", - "tt0054462", - "tt7068942", - "tt1407084", - "tt2494376", - "tt7969140", - "tt0144168", - "tt0112483", - "tt1581835", - "tt0285861", - "tt0455362", - "tt0093135", - "tt0106393", - "tt0462229", - "tt0060862", - "tt0080310", - "tt0092534", - "tt0196857", - "tt0105217", - "tt1634136", - "tt0452643", - "tt3181776", - "tt0072448", - "tt1331307", - "tt0309820", - "tt0338512", - "tt0130370", - "tt0066141", - "tt0243278", - "tt0337656", - "tt0089421", - "tt0110137", - "tt0906108", - "tt0087231", - "tt0213149", - "tt0099762", - "tt0235686", - "tt5607096", - "tt6640390", - "tt9243038", - "tt1146438", - "tt0086984", - "tt2667380", - "tt6193454", - "tt0054847", - "tt0471030", - "tt6013156", - "tt0046344", - "tt0418832", - "tt0046374", - "tt0096913", - "tt0038213", - "tt0088708", - "tt0028167", - "tt0038338", - "tt0479647", - "tt0031020", - "tt0412915", - "tt0132451", - "tt0092605", - "tt0092548", - "tt0098622", - "tt0101326", - "tt2474976", - "tt0250934", - "tt1640711", - "tt1391137", - "tt2124787", - "tt0475937", - "tt0111419", - "tt0830681", - "tt0096804", - "tt0089695", - "tt0238552", - "tt6027344", - "tt0400426", - "tt0120741", - "tt3705412", - "tt0060934", - "tt0059742", - "tt1836944", - "tt0106627", - "tt0068421", - "tt0096073", - "tt0964185", - "tt1604171", - "tt0283632", - "tt0110907", - "tt3003996", - "tt0455596", - "tt0098320", - "tt3784652", - "tt1841642", - "tt3391782", - "tt0157171", - "tt0762138", - "tt1609479", - "tt0076953", - "tt0080342", - "tt0057514", - "tt0055308", - "tt0099108", - "tt1482167", - "tt5609734", - "tt0061720", - "tt0082625", - "tt0193431", - "tt2082152", - "tt0473188", - "tt0090583", - "tt0297162", - "tt2172935", - "tt2960930", - "tt0206917", - "tt3327624", - "tt4198186", - "tt0047522", - "tt3043594", - "tt1141261", - "tt0117826", - "tt0103907", - "tt0094860", - "tt0109360", - "tt0048140", - "tt0108517", - "tt0074256", - "tt9233904", - "tt4934990", - "tt0072196", - "tt6566624", - "tt0071186", - "tt0363473", - "tt0083944", - "tt3565668", - "tt0306474", - "tt6021960", - "tt3135424", - "tt0105242", - "tt0462244", - "tt0094383", - "tt0107953", - "tt0906665", - "tt2558556", - "tt3619070", - "tt0110678", - "tt1087853", - "tt0106450", - "tt2268458", - "tt0089880", - "tt0050539", - "tt0105414", - "tt0111345", - "tt1073510", - "tt7349662", - "tt5692390", - "tt0095956", - "tt0103773", - "tt5053508", - "tt0092112", - "tt0103805", - "tt0111143", - "tt0069019", - "tt0102216", - "tt0031983", - "tt0074434", - "tt0039370", - "tt3083008", - "tt2226440", - "tt0040802", - "tt0027630", - "tt2319781", - "tt0037055", - "tt0033098", - "tt1737090", - "tt2244743", - "tt5667696", - "tt1927012", - "tt0139421", - "tt0120860", - "tt0466893", - "tt0780608", - "tt2386404", - "tt0106452", - "tt2535470", - "tt0120695", - "tt0100485", - "tt0093777", - "tt0907678", - "tt0082817", - "tt0386741", - "tt1457765", - "tt0389957", - "tt3137630", - "tt0095655", - "tt0095897", - "tt0095800", - "tt0204175", - "tt0413015", - "tt0059106", - "tt6333070", - "tt0118571", - "tt2345567", - "tt0088194", - "tt1197624", - "tt0064541", - "tt1821641", - "tt2784512", - "tt2965412", - "tt0045347", - "tt1194417", - "tt8579840", - "tt0099385", - "tt1067106", - "tt1018785", - "tt1610996", - "tt0166175", - "tt0049513", - "tt6046314", - "tt0037193", - "tt0025228", - "tt1027747", - "tt2212008", - "tt0025164", - "tt2389182", - "tt8320402", - "tt0041415", - "tt6010628", - "tt0109890", - "tt2249221", - "tt0319061", - "tt9239778", - "tt0051201", - "tt2923316", - "tt5956006", - "tt2238839", - "tt0088851", - "tt0074812", - "tt0042049", - "tt0023198", - "tt0057598", - "tt0046791", - "tt5093026", - "tt0492486", - "tt5254610", - "tt7177754", - "tt0091630", - "tt0024831", - "tt0089489", - "tt0091579", - "tt1711456", - "tt0335563", - "tt4847246", - "tt0083722", - "tt0056085", - "tt0397430", - "tt0068022", - "tt4575576", - "tt0102005", - "tt1054486", - "tt0402057", - "tt0119791", - "tt0824758", - "tt1430615", - "tt1362058", - "tt0896534", - "tt0077742", - "tt5193784", - "tt0060315", - "tt0184791", - "tt0051658", - "tt0435680", - "tt1217616", - "tt0796375", - "tt0353324", - "tt1183665", - "tt1536410", - "tt1867093", - "tt1220888", - "tt5479446", - "tt0467110", - "tt0096256", - "tt0430770", - "tt0115986", - "tt1269706", - "tt0045161", - "tt3297330", - "tt0064072", - "tt1340773", - "tt4870838", - "tt1054487", - "tt0077294", - "tt0110169", - "tt0080716", - "tt0760311", - "tt3993532", - "tt0790623", - "tt8587650", - "tt0318081", - "tt1742650", - "tt2473602", - "tt1780798", - "tt2490326", - "tt1349451", - "tt1263750", - "tt1217070", - "tt0157583", - "tt1573109", - "tt1316037", - "tt1829012", - "tt1928340", - "tt0118589", - "tt0029546", - "tt0314063", - "tt4324274", - "tt0991178", - "tt3139072", - "tt0486051", - "tt0044386", - "tt0057197", - "tt0104850", - "tt0951335", - "tt1487118", - "tt1305591", - "tt2515030", - "tt0042981", - "tt0043030", - "tt0037462", - "tt0443559", - "tt0956038", - "tt1012804", - "tt2355495", - "tt1071804", - "tt0097737", - "tt0806165", - "tt3503406", - "tt0042372", - "tt0222851", - "tt0089841", - "tt0758799", - "tt0462338", - "tt0929629", - "tt1554091", - "tt0397044", - "tt0069002", - "tt0093779", - "tt2018069", - "tt1116184", - "tt1673430", - "tt0055516", - "tt1403988", - "tt0942903", - "tt0041644", - "tt0022834", - "tt0060434", - "tt6116856", - "tt0241025", - "tt1194263", - "tt3204392", - "tt5741304", - "tt0051444", - "tt0872230", - "tt0090986", - "tt1274300", - "tt0881320", - "tt6340090", - "tt1633356", - "tt0097278", - "tt0085198", - "tt4372240", - "tt6169694", - "tt0469641", - "tt0107007", - "tt8461918", - "tt6936350", - "tt5545622", - "tt0101329", - "tt0074119", - "tt0059044", - "tt1978532", - "tt1524170", - "tt3043176", - "tt1538534", - "tt2330458", - "tt1808452", - "tt0086967", - "tt0092632", - "tt0484740", - "tt0770806", - "tt0075930", - "tt1097015", - "tt0093090", - "tt0096453", - "tt2569236", - "tt2301900", - "tt0319970", - "tt1421049", - "tt3450134", - "tt1091751", - "tt0038166", - "tt0099669", - "tt0173771", - "tt0297780", - "tt0077801", - "tt0068716", - "tt1436046", - "tt0099266", - "tt0036326", - "tt0082696", - "tt1763316", - "tt0079482", - "tt5688868", - "tt1339098", - "tt6571636", - "tt2435514", - "tt2204379", - "tt1294213", - "tt0052077", - "tt0094963", - "tt0355473", - "tt5938084", - "tt0073195", - "tt0326905", - "tt0058694", - "tt0091203", - "tt0088066", - "tt0066999", - "tt0081617", - "tt8425332", - "tt0068615", - "tt6254874", - "tt6538402", - "tt0095652", - "tt2106440", - "tt0070868", - "tt7210264", - "tt2064968", - "tt3961394", - "tt4386596", - "tt0073692", - "tt0031851", - "tt0083261", - "tt0086449", - "tt0056056", - "tt5637514", - "tt0120744", - "tt0072225", - "tt0046353", - "tt7532178", - "tt0094761", - "tt0092240", - "tt0024914", - "tt0084556", - "tt0080790", - "tt0051418", - "tt0071627", - "tt0097557", - "tt2168854", - "tt0857265", - "tt0830558", - "tt3608654", - "tt7424200", - "tt0108577", - "tt0844866", - "tt6547170", - "tt3343136", - "tt1204883", - "tt2014264", - "tt0023125", - "tt0080464", - "tt0059792", - "tt0884224", - "tt0900357", - "tt0493405", - "tt1293561", - "tt1885423", - "tt0023761", - "tt0086525", - "tt0985060", - "tt0090203", - "tt0222812", - "tt0080120", - "tt0056875", - "tt0103919", - "tt0055353", - "tt3823098", - "tt5028598", - "tt7338690", - "tt5086308", - "tt0082559", - "tt2955304", - "tt0357507", - "tt3721110", - "tt1716760", - "tt0090327", - "tt6617656", - "tt8031422", - "tt2140403", - "tt0110116", - "tt4086018", - "tt0084573", - "tt0079285", - "tt1767372", - "tt1742336", - "tt3439114", - "tt1603314", - "tt0062622", - "tt2713642", - "tt0082378", - "tt0945580", - "tt1702926", - "tt0111048", - "tt0089730", - "tt2556874", - "tt1766094", - "tt0063696", - "tt2251281", - "tt2401807", - "tt0758766", - "tt3279124", - "tt1691920", - "tt2101383", - "tt0785007", - "tt1085779", - "tt0481141", - "tt0482572", - "tt1606657", - "tt0858486", - "tt0049870", - "tt5613056", - "tt0067446", - "tt1523264", - "tt0469263", - "tt1396221", - "tt0465502", - "tt0331632", - "tt0041923", - "tt0082371", - "tt0108171", - "tt0063654", - "tt1630061", - "tt0489325", - "tt3606888", - "tt1603257", - "tt5765144", - "tt0849470", - "tt4092686", - "tt0372594", - "tt0078831", - "tt0486640", - "tt1787777", - "tt0416185", - "tt1175713", - "tt5867226", - "tt1797469", - "tt6107516", - "tt0072685", - "tt6343058", - "tt0399221", - "tt2928840", - "tt2396489", - "tt6586892", - "tt2139555", - "tt0067224", - "tt0140381", - "tt0074187", - "tt1148200", - "tt6518270", - "tt1131748", - "tt0117473", - "tt0366780", - "tt2785032", - "tt3276924", - "tt0067490", - "tt0374563", - "tt0084237", - "tt0050281", - "tt0116329", - "tt0105488", - "tt0120004", - "tt0107843", - "tt0155776", - "tt2452200", - "tt1255916", - "tt1713476", - "tt4073790", - "tt0140379", - "tt1423894", - "tt6663582", - "tt4453756", - "tt0060959", - "tt0074588", - "tt0455782", - "tt5180888", - "tt1129445", - "tt1640548", - "tt0905372", - "tt4410000", - "tt5581752", - "tt0107952", - "tt0186151", - "tt0489235", - "tt4105584", - "tt0332047", - "tt6179746", - "tt4435082", - "tt1073105", - "tt6793280", - "tt0191915", - "tt0450278", - "tt1015976", - "tt0435625", - "tt0473444", - "tt1564349", - "tt0074768", - "tt0110612", - "tt0455407", - "tt0498353", - "tt0488508", - "tt0454970", - "tt0070215", - "tt1016268", - "tt2332831", - "tt0103976", - "tt0071150", - "tt0058050", - "tt1615918", - "tt1602617", - "tt0321359", - "tt1613023", - "tt1068641", - "tt1682181", - "tt0463034", - "tt1604231", - "tt0055972", - "tt0096119", - "tt0416654", - "tt0359517", - "tt0120184", - "tt0463998", - "tt3450900", - "tt5451690", - "tt0079871", - "tt1258998", - "tt6510332", - "tt0081383", - "tt3499176", - "tt3225318", - "tt2974918", - "tt0380389", - "tt0308508", - "tt0345950", - "tt0101316", - "tt0892318", - "tt2004432", - "tt0247196", - "tt1777608", - "tt0036323", - "tt4779344", - "tt1630603", - "tt0090859", - "tt0064296", - "tt0758053", - "tt0085933", - "tt0089881", - "tt1155053", - "tt1099212", - "tt1167638", - "tt1291580", - "tt0075909", - "tt1708427", - "tt0422401", - "tt0052619", - "tt0059465", - "tt2162709", - "tt6469826", - "tt1104679", - "tt0042707", - "tt1179855", - "tt1727261", - "tt0057480", - "tt1091992", - "tt6072502", - "tt1083456", - "tt1734203", - "tt0065669", - "tt0457433", - "tt2094890", - "tt0074751", - "tt2113075", - "tt0083869", - "tt6764122", - "tt4125206", - "tt0433771", - "tt3173594", - "tt3829920", - "tt2165765", - "tt0105792", - "tt0034902", - "tt1910498", - "tt3532608", - "tt1907779", - "tt1329177", - "tt0066578", - "tt6998518", - "tt1565069", - "tt0036959", - "tt1107812", - "tt6911608", - "tt3004746", - "tt3638012", - "tt0062298", - "tt2372251", - "tt1417032", - "tt0367085", - "tt0082243", - "tt5672286", - "tt1618435", - "tt0070544", - "tt1996264", - "tt0254872", - "tt0163187", - "tt3892434", - "tt0055464", - "tt0079450", - "tt0080440", - "tt0104670", - "tt1003052", - "tt1407061", - "tt0264508", - "tt0063501", - "tt0149367", - "tt1754811", - "tt0156182", - "tt0062883", - "tt0079366", - "tt3458254", - "tt0068522", - "tt0082592", - "tt0120776", - "tt1686782", - "tt1706598", - "tt0057993", - "tt1403075", - "tt0106660", - "tt1704614", - "tt0075950", - "tt0097211", - "tt0093995", - "tt0055073", - "tt6241352", - "tt0071408", - "tt8989870", - "tt5113250", - "tt0227005", - "tt0254871", - "tt0120524", - "tt0067716", - "tt4075804", - "tt0964539", - "tt2235542", - "tt0053848", - "tt6053938", - "tt0466839", - "tt0482546", - "tt1794790", - "tt0762105", - "tt0970472", - "tt0076137", - "tt0051336", - "tt1413489", - "tt0829459", - "tt0117218", - "tt0067927", - "tt7515456", - "tt5427122", - "tt0082348", - "tt5897636", - "tt1486190", - "tt0437405", - "tt0380599", - "tt1426363", - "tt0492389", - "tt2628316", - "tt0438315", - "tt0119485", - "tt0071607", - "tt1334102", - "tt0120458", - "tt0043255", - "tt1278379", - "tt2908856", - "tt7216256", - "tt2171867", - "tt0032637", - "tt0130827", - "tt0032635", - "tt6147512", - "tt3567288", - "tt0262240", - "tt4895740", - "tt0480687", - "tt0227850", - "tt0107193", - "tt0308343", - "tt0884328", - "tt0120577", - "tt1598642", - "tt0780485", - "tt3286052", - "tt2494362", - "tt0424774", - "tt0104409", - "tt1320239", - "tt0842929", - "tt0050105", - "tt2473510", - "tt2412746", - "tt1852770", - "tt1536044", - "tt2072933", - "tt2400463", - "tt0274546", - "tt1623288", - "tt3120944", - "tt0115683", - "tt4062536", - "tt0337636", - "tt1569923", - "tt1778304", - "tt4052882", - "tt1311699", - "tt2473682", - "tt1179933", - "tt2166834", - "tt0057623", - "tt1716747", - "tt5112578", - "tt0446687", - "tt4695012", - "tt0354623", - "tt2409634", - "tt2109184", - "tt3812730", - "tt2359381", - "tt5308322", - "tt4547056", - "tt0451957", - "tt7153766", - "tt0118564", - "tt1285009", - "tt1034385", - "tt1179904", - "tt5628792", - "tt0338094", - "tt0327597", - "tt7055592", - "tt6441072", - "tt0469623", - "tt0101670", - "tt0229440", - "tt2820466", - "tt5886440", - "tt0270980", - "tt0408985", - "tt2238050", - "tt1690455", - "tt1072748", - "tt5091548", - "tt3139086", - "tt0897361", - "tt2313197", - "tt0250347", - "tt0368578", - "tt2114461", - "tt8403680", - "tt4151320", - "tt0116514", - "tt0032641", - "tt0954947", - "tt4853102", - "tt4714782", - "tt0064760", - "tt6104760", - "tt0455957", - "tt1645155", - "tt3060952", - "tt0114852", - "tt0902272", - "tt3504048", - "tt0110527", - "tt0099939", - "tt1127896", - "tt0177876", - "tt0813980", - "tt4280430", - "tt1494772", - "tt0096244", - "tt1750698", - "tt2071550", - "tt0490181", - "tt0479528", - "tt3416744", - "tt0093936", - "tt0488604", - "tt0120008", - "tt2101569", - "tt1232783", - "tt1431181", - "tt0120609", - "tt0067525", - "tt1411704", - "tt3845232", - "tt0093148", - "tt1630626", - "tt0365967", - "tt0087755", - "tt0046672", - "tt0071334", - "tt1411697", - "tt2281587", - "tt0109361", - "tt2498024", - "tt0029222", - "tt4177742", - "tt0160009", - "tt1951261", - "tt1119646", - "tt0074653", - "tt1684226", - "tt6685596", - "tt0460745", - "tt0308383", - "tt2103267", - "tt0346631", - "tt0899106", - "tt0085121", - "tt0485985", - "tt0117331", - "tt9135870", - "tt2403021", - "tt2317225", - "tt0158811", - "tt0257516", - "tt0086014", - "tt0114887", - "tt0117468", - "tt2221648", - "tt2181953", - "tt5783382", - "tt0118747", - "tt0300532", - "tt0076363", - "tt4434688", - "tt5688932", - "tt4568370", - "tt0097637", - "tt3616934", - "tt0120587", - "tt3181822", - "tt2404639", - "tt0091621", - "tt0303929", - "tt0094142", - "tt6364638", - "tt1179069", - "tt0087247", - "tt6710826", - "tt4610748", - "tt0219653", - "tt0118715", - "tt0838247", - "tt2006295", - "tt0213965", - "tt0775489", - "tt0104692", - "tt0449487", - "tt0045578", - "tt0336325", - "tt1937264", - "tt0112691", - "tt0337579", - "tt0115639", - "tt0292644", - "tt0470705", - "tt0410764", - "tt6753206", - "tt0444653", - "tt0402901", - "tt0430912", - "tt2720680", - "tt1316536", - "tt0410377", - "tt2870708", - "tt0100404", - "tt2275946", - "tt5390066", - "tt1251757", - "tt0119535", - "tt0191255", - "tt0116287", - "tt0482527", - "tt0104437", - "tt0808331", - "tt2103217", - "tt0091635", - "tt0065854", - "tt4761916", - "tt0065709", - "tt2420876", - "tt8360902", - "tt0115697", - "tt0098273", - "tt7476438", - "tt2398241", - "tt0094792", - "tt0101473", - "tt0068669", - "tt1172994", - "tt0129332", - "tt0124819", - "tt1112782", - "tt0808510", - "tt2091935", - "tt0090022", - "tt0116191", - "tt0455499", - "tt0115783", - "tt0257756", - "tt0896798", - "tt0184858", - "tt0146291", - "tt0027073", - "tt1118511", - "tt0024782", - "tt2017020", - "tt0062803", - "tt0145809", - "tt0106307", - "tt0191896", - "tt0024721", - "tt0132480", - "tt3203992", - "tt0031964", - "tt0086129", - "tt5910344", - "tt0082677", - "tt0013626", - "tt0425430", - "tt1935929", - "tt0084522", - "tt0113845", - "tt0089826", - "tt0405336", - "tt2515034", - "tt3262342", - "tt6775942", - "tt0112453", - "tt0316732", - "tt0091217", - "tt2140629", - "tt2994190", - "tt1285309", - "tt0288045", - "tt0072308", - "tt1477837", - "tt1031969", - "tt2918436", - "tt4729896", - "tt0421206", - "tt0303714", - "tt8526506", - "tt0455960", - "tt1233301", - "tt1529572", - "tt1067774", - "tt0107969", - "tt1464580", - "tt0123865", - "tt0189998", - "tt0838232", - "tt0454824", - "tt1244754", - "tt2404583", - "tt0436339", - "tt1369706", - "tt0090056", - "tt0139699", - "tt0102307", - "tt2452042", - "tt1055292", - "tt0331811", - "tt0053917", - "tt5607028", - "tt1596346", - "tt0871426", - "tt0073341", - "tt0269347", - "tt0314431", - "tt1130080", - "tt1656186", - "tt0074977", - "tt0450405", - "tt1470023", - "tt0160797", - "tt1850397", - "tt1480656", - "tt0086244", - "tt5539924", - "tt0109045", - "tt0385726", - "tt0073802", - "tt0032884", - "tt0430304", - "tt0102945", - "tt0054953", - "tt1606392", - "tt0364751", - "tt0419677", - "tt0312528", - "tt0098627", - "tt0365485", - "tt0095174", - "tt0089370", - "tt5774450", - "tt1767354", - "tt0475944", - "tt1531663", - "tt1225822", - "tt0116277", - "tt0115857", - "tt0089155", - "tt1441326", - "tt1212436", - "tt5771710", - "tt2382396", - "tt0437863", - "tt0112883", - "tt0804522", - "tt0443536", - "tt0069776", - "tt0281686", - "tt1287468", - "tt0108002", - "tt0120731", - "tt0977855", - "tt0406759", - "tt4547938", - "tt0765120", - "tt0443632", - "tt0062765", - "tt0092691", - "tt0460829", - "tt1176740", - "tt0105435", - "tt0844993", - "tt0355702", - "tt0075784", - "tt0452598", - "tt1578275", - "tt0294870", - "tt0810922", - "tt8457394", - "tt0266489", - "tt0112722", - "tt1414382", - "tt0862467", - "tt0758762", - "tt0360201", - "tt0827782", - "tt0402894", - "tt0271027", - "tt1270262", - "tt0179626", - "tt0375154", - "tt0401997", - "tt0239395", - "tt0491152", - "tt3807900", - "tt0462200", - "tt0988047", - "tt0476964", - "tt0107302", - "tt0111255", - "tt0120693", - "tt0206275", - "tt0427470", - "tt0037445", - "tt1093357", - "tt1687901", - "tt3962984", - "tt0132347", - "tt1222817", - "tt0385267", - "tt2357291", - "tt0116409", - "tt5459382", - "tt1197628", - "tt0039600", - "tt0051744", - "tt0445990", - "tt1038919", - "tt0146309", - "tt0397313", - "tt8989874", - "tt0758794", - "tt0071677", - "tt0039627", - "tt1428538", - "tt0069007", - "tt0465624", - "tt0084173", - "tt4602554", - "tt6723494", - "tt5687040", - "tt1075747", - "tt6522982", - "tt5959952", - "tt0053221", - "tt0421082", - "tt0102057", - "tt0865554", - "tt0450345", - "tt0054086", - "tt0110005", - "tt0089469", - "tt0780583", - "tt0219699", - "tt1130884", - "tt0453556", - "tt1467304", - "tt1210042", - "tt5220122", - "tt0838283", - "tt0027125", - "tt0116908", - "tt0396752", - "tt8541440", - "tt0102940", - "tt0486551", - "tt1323045", - "tt6241390", - "tt0421054", - "tt0119925", - "tt0329575", - "tt0478134", - "tt0035103", - "tt3007512", - "tt0049672", - "tt1883367", - "tt0963794", - "tt1415283", - "tt3312830", - "tt6288124", - "tt0477051", - "tt0110932", - "tt3605418", - "tt7014006", - "tt0175536", - "tt0107822", - "tt0114694", - "tt1095217", - "tt0804461", - "tt5743816", - "tt0120461", - "tt0433387", - "tt1530509", - "tt0083511", - "tt1152398", - "tt0462465", - "tt0209475", - "tt0065214", - "tt0181316", - "tt1294226", - "tt0181536", - "tt0120780", - "tt4938374", - "tt1126591", - "tt0117802", - "tt6532374", - "tt6464360", - "tt0368226", - "tt0455967", - "tt1107365", - "tt0265349", - "tt0328832", - "tt0120794", - "tt1103153", - "tt0398017", - "tt0069754", - "tt0127536", - "tt0068583", - "tt2377132", - "tt1440292", - "tt5648036", - "tt0099582", - "tt1051904", - "tt5988966", - "tt0049730", - "tt1985949", - "tt0137363", - "tt1020558", - "tt0810913", - "tt0185183", - "tt0378109", - "tt3917210", - "tt0335119", - "tt0770752", - "tt1674768", - "tt1216492", - "tt1540133", - "tt0406375", - "tt5595168", - "tt0364045", - "tt5371168", - "tt1646926", - "tt0395699", - "tt0455760", - "tt2170593", - "tt1230414", - "tt0408839", - "tt0267804", - "tt0298814", - "tt1564585", - "tt1532503", - "tt0406816", - "tt0400717", - "tt1297919", - "tt0348333", - "tt1116186", - "tt0120434", - "tt0370032", - "tt1289406", - "tt1229822", - "tt6370614", - "tt0173840", - "tt0457513", - "tt0085995", - "tt0248667", - "tt0061418", - "tt1131734", - "tt1657507", - "tt0430357", - "tt1800741", - "tt0109327", - "tt0116136", - "tt3860916", - "tt1017460", - "tt0422720", - "tt5201246", - "tt1431133", - "tt0795368", - "tt0171804", - "tt7664504", - "tt1034314", - "tt7317494", - "tt1053424", - "tt0080487", - "tt0433383", - "tt0043461", - "tt1924396", - "tt0790686", - "tt0929632", - "tt1478964", - "tt1656190", - "tt0019186", - "tt1172570", - "tt4505670", - "tt1615147", - "tt1509767", - "tt1023481", - "tt8589788", - "tt6133466", - "tt0462590", - "tt0918927", - "tt0443649", - "tt0386117", - "tt1131729", - "tt2180411", - "tt0286499", - "tt0125664", - "tt1234548", - "tt0113627", - "tt1067583", - "tt2561572", - "tt2626350", - "tt0817230", - "tt2096672", - "tt1019452", - "tt2305051", - "tt8780234", - "tt0040723", - "tt1114277", - "tt0453451", - "tt0048473", - "tt6100122", - "tt1462058", - "tt0134033", - "tt0269743", - "tt0052572", - "tt0048956", - "tt0340855", - "tt0167331", - "tt0035462", - "tt0086510", - "tt0056919", - "tt2243123", - "tt0042792", - "tt6624126", - "tt0159365", - "tt0177789", - "tt4974778", - "tt3316960", - "tt5136686", - "tt0099141", - "tt1267297", - "tt0829150", - "tt0947810", - "tt0120657", - "tt0108358", - "tt1192628", - "tt0093822", - "tt4052050", - "tt0112508", - "tt0261392", - "tt1621429", - "tt0398808", - "tt1298649", - "tt0815236", - "tt5397194", - "tt0387131", - "tt0443274", - "tt0079417", - "tt0090184", - "tt0469916", - "tt0111282", - "tt0073018", - "tt5813366", - "tt0081975", - "tt1229340", - "tt1507571", - "tt7334528", - "tt0066080", - "tt0277027", - "tt0324941", - "tt6401004", - "tt5685006", - "tt0029971", - "tt0758752", - "tt0142688", - "tt0115798", - "tt0415306", - "tt1174732", - "tt6055450", - "tt0443680", - "tt0488120", - "tt0257076", - "tt0430105", - "tt0408790", - "tt3892172", - "tt0825232", - "tt0070735", - "tt0442933", - "tt0067116", - "tt0374900", - "tt0413099", - "tt2273648", - "tt0986263", - "tt1013753", - "tt0082533", - "tt0814255", - "tt0183790", - "tt0311429", - "tt0104452", - "tt7681902", - "tt0177971", - "tt5735582", - "tt1564367", - "tt0092890", - "tt0072890", - "tt0097322", - "tt0092297", - "tt5041296", - "tt0462322", - "tt1120985", - "tt1059786", - "tt0064115", - "tt7946836", - "tt1148204", - "tt1458175", - "tt0431308", - "tt0183505", - "tt0289043", - "tt0758774", - "tt0338096", - "tt1313139", - "tt1985966", - "tt0055382", - "tt1243957", - "tt1672723", - "tt0486822", - "tt0080678", - "tt0315733", - "tt0463854", - "tt1436562", - "tt2293640", - "tt0142257", - "tt0050629", - "tt0111257", - "tt0044388", - "tt0478087", - "tt8045978", - "tt1723121", - "tt0063219", - "tt5198796", - "tt0075249", - "tt0328107", - "tt1596350", - "tt1028576", - "tt0421715", - "tt5719232", - "tt0212346", - "tt0114906", - "tt0081259", - "tt6968542", - "tt0380623", - "tt0844471", - "tt0150216", - "tt0175880", - "tt1092026", - "tt0320691", - "tt1033575", - "tt0829482", - "tt0401855", - "tt0947798", - "tt1232829", - "tt0257044", - "tt0396171", - "tt0106977", - "tt0111161", - "tt1605783", - "tt0414387", - "tt0450259", - "tt0093780", - "tt0834001", - "tt0060174", - "tt0405422", - "tt1496025", - "tt0458352", - "tt0079470", - "tt0758758", - "tt0060891", - "tt6558114", - "tt5932800", - "tt0389860", - "tt0343660", - "tt0477348", - "tt0253474", - "tt1951216", - "tt2246549", - "tt0059229", - "tt1641385", - "tt3625352", - "tt1810697", - "tt5654710", - "tt0284262", - "tt1068242", - "tt1754367", - "tt1880209", - "tt1924394", - "tt1684925", - "tt2920540", - "tt2147365", - "tt1683526", - "tt0105411", - "tt1966604", - "tt1185371", - "tt1598873", - "tt0059633", - "tt8912318", - "tt0081184", - "tt1641252", - "tt1329232", - "tt2586120", - "tt0085303", - "tt4117850", - "tt4268850", - "tt2769184", - "tt2509850", - "tt3265262", - "tt2945796", - "tt0057521", - "tt1645074", - "tt0111454", - "tt0067003", - "tt3699684", - "tt1702009", - "tt0055399", - "tt0459327", - "tt6878882", - "tt1673697", - "tt0087451", - "tt3263520", - "tt0093990", - "tt4080956", - "tt1785353", - "tt1883168", - "tt0180999", - "tt0086610", - "tt0073697", - "tt2393827", - "tt0075097", - "tt7158430", - "tt2758890", - "tt2943068", - "tt0085672", - "tt3149640", - "tt2626964", - "tt0125510", - "tt4050596", - "tt0089271", - "tt0022685", - "tt8595574", - "tt6069620", - "tt1605798", - "tt0069495", - "tt0099949", - "tt6043842", - "tt0124014", - "tt0276818", - "tt0297462", - "tt0283534", - "tt0087072", - "tt0098502", - "tt0086248", - "tt0131543", - "tt0098503", - "tt0105150", - "tt0478304", - "tt0212879", - "tt8128866", - "tt6566400", - "tt0083973", - "tt5931388", - "tt0095989", - "tt0110722", - "tt0439630", - "tt1210801", - "tt0094712", - "tt0067357", - "tt0084921", - "tt0079135", - "tt5727282", - "tt8119752", - "tt0094910", - "tt2580382", - "tt0072236", - "tt0109702", - "tt0078749", - "tt0080520", - "tt1389781", - "tt0103116", - "tt3496372", - "tt0805526", - "tt0105632", - "tt0070913", - "tt0057443", - "tt8074486", - "tt1817081", - "tt1879032", - "tt2113792", - "tt2043931", - "tt7944094", - "tt1861279", - "tt1848902", - "tt1545328", - "tt2024506", - "tt1989475", - "tt1020055", - "tt1887814", - "tt7164066", - "tt2347497", - "tt0835418", - "tt1142988", - "tt0234886", - "tt1438173", - "tt0061333", - "tt1684564", - "tt2999390", - "tt0058208", - "tt6774786", - "tt1187041", - "tt3845960", - "tt2005164", - "tt2587198", - "tt2310109", - "tt1222815", - "tt8490838", - "tt1114677", - "tt2112152", - "tt1816642", - "tt0360556", - "tt1638364", - "tt2279864", - "tt2216240", - "tt2920808", - "tt2946582", - "tt1828970", - "tt2461034", - "tt3148890", - "tt0098536", - "tt1662293", - "tt0804463", - "tt2343266", - "tt2012011", - "tt1822381", - "tt3165608", - "tt5913184", - "tt8691808", - "tt0960066", - "tt1942884", - "tt1855199", - "tt3906082", - "tt2910342", - "tt2107648", - "tt2309224", - "tt2085910", - "tt0095354", - "tt1680045", - "tt1720164", - "tt1684233", - "tt0055633", - "tt1611224", - "tt0085694", - "tt1659338", - "tt0065580", - "tt0090192", - "tt2124803", - "tt2331100", - "tt0084060", - "tt0062262", - "tt3138104", - "tt3409848", - "tt0059653", - "tt1210819", - "tt1865393", - "tt3636326", - "tt0091763", - "tt1333125", - "tt1621045", - "tt0372119", - "tt7819394", - "tt1547234", - "tt5747692", - "tt0461604", - "tt0048484", - "tt1838544", - "tt0051471", - "tt0030127", - "tt0083012", - "tt0433442", - "tt0984210", - "tt0393685", - "tt0252866", - "tt0494224", - "tt0054632", - "tt5361596", - "tt1493828", - "tt7941052", - "tt1247683", - "tt2006040", - "tt5338644", - "tt0896031", - "tt0286112", - "tt0972359", - "tt8582162", - "tt1394383", - "tt1361313", - "tt1268987", - "tt1706680", - "tt1407049", - "tt1568323", - "tt0059530", - "tt1012729", - "tt0765128", - "tt0093066", - "tt1571243", - "tt1615480", - "tt2198241", - "tt1407078", - "tt1885300", - "tt0058003", - "tt0035929", - "tt1597033", - "tt0077533", - "tt1156067", - "tt1790825", - "tt2499414", - "tt6701492", - "tt6591554", - "tt1043651", - "tt7313518", - "tt5816712", - "tt1846444", - "tt1519664", - "tt1559549", - "tt0444672", - "tt0471930", - "tt1176251", - "tt0178022", - "tt1198075", - "tt1791658", - "tt1359555", - "tt0847527", - "tt0482461", - "tt0981042", - "tt0798817", - "tt0091844", - "tt0473709", - "tt0430431", - "tt1500140", - "tt1630564", - "tt1410295", - "tt5778098", - "tt6793580", - "tt0159458", - "tt5779540", - "tt2369047", - "tt1053880", - "tt1325723", - "tt0409011", - "tt1401607", - "tt1283546", - "tt1129410", - "tt1105730", - "tt1196170", - "tt1343029", - "tt1259227", - "tt0483719", - "tt4481514", - "tt1400515", - "tt1225302", - "tt1792131", - "tt1403177", - "tt1341710", - "tt0756618", - "tt0463984", - "tt0371257", - "tt0068379", - "tt1327200", - "tt0096740", - "tt1471156", - "tt0896533", - "tt0100114", - "tt0411705", - "tt1692928", - "tt1319744", - "tt1079360", - "tt0081250", - "tt0068605", - "tt0096316", - "tt1680051", - "tt0063462", - "tt1436572", - "tt1047449", - "tt8235966", - "tt0073324", - "tt0086346", - "tt7897478", - "tt0409034", - "tt2124172", - "tt1073246", - "tt1183919", - "tt1678051", - "tt1614456", - "tt0114436", - "tt1702425", - "tt1502420", - "tt0190865", - "tt1415284", - "tt3127022", - "tt6155374", - "tt6494418", - "tt7222296", - "tt1560978", - "tt2689992", - "tt1522262", - "tt6002232", - "tt0109676", - "tt1641831", - "tt0163579", - "tt0113950", - "tt0085333", - "tt2039339", - "tt6213362", - "tt0096487", - "tt0119643", - "tt1870425", - "tt0113965", - "tt0120148", - "tt1663689", - "tt0107211", - "tt0102685", - "tt0120820", - "tt0103074", - "tt0494199", - "tt0116213", - "tt0113949", - "tt0138097", - "tt0103962", - "tt0897347", - "tt0102798", - "tt1734122", - "tt0114614", - "tt0113948", - "tt0106950", - "tt2141875", - "tt0102250", - "tt0955308", - "tt0109813", - "tt2609156", - "tt2376024", - "tt1568802", - "tt2050633", - "tt1037218", - "tt3697626", - "tt1840388", - "tt2381355", - "tt2060525", - "tt2236182", - "tt0068997", - "tt4125654", - "tt1398428", - "tt0796302", - "tt1308748", - "tt2083231", - "tt1007032", - "tt2396701", - "tt1155060", - "tt1995341", - "tt0423455", - "tt2341985", - "tt1673702", - "tt0490499", - "tt0109723", - "tt2417650", - "tt1999995", - "tt0498351", - "tt2401223", - "tt4222028", - "tt0462362", - "tt0063970", - "tt1212451", - "tt0027545", - "tt0036376", - "tt0401085", - "tt1652361", - "tt2545538", - "tt2953196", - "tt1855236", - "tt3062074", - "tt1024733", - "tt2095568", - "tt2173768", - "tt3124476", - "tt0058507", - "tt1545754", - "tt2425886", - "tt1517471", - "tt2569792", - "tt2991532", - "tt1559036", - "tt0093483", - "tt2262175", - "tt2420006", - "tt0350261", - "tt2215151", - "tt1416801", - "tt1778931", - "tt0119173", - "tt0123847", - "tt4008652", - "tt2492664", - "tt2290065", - "tt2620736", - "tt1037222", - "tt0074564", - "tt2793490", - "tt0081237", - "tt0090567", - "tt0072962", - "tt3326366", - "tt0431091", - "tt0466816", - "tt0368222", - "tt3090252", - "tt0413895", - "tt0117107", - "tt0061587", - "tt3092606", - "tt4831420", - "tt3899796", - "tt5291792", - "tt5073620", - "tt2194328", - "tt0049432", - "tt0070445", - "tt0081529", - "tt0080756", - "tt5346228", - "tt0072665", - "tt1610013", - "tt0070511", - "tt5687334", - "tt2229377", - "tt0084698", - "tt3104930", - "tt6227846", - "tt0087032", - "tt2635006", - "tt0077504", - "tt2724064", - "tt0204640", - "tt4180556", - "tt0064923", - "tt0097493", - "tt6903980", - "tt0068473", - "tt0090073", - "tt0118897", - "tt0198386", - "tt0076729", - "tt0132245", - "tt0098093", - "tt0083642", - "tt0116953", - "tt0096787", - "tt0086325", - "tt3014078", - "tt0077524", - "tt3417854", - "tt0361500", - "tt4118932", - "tt0079948", - "tt0070915", - "tt5836316", - "tt0099173", - "tt0068617", - "tt4316236", - "tt4257858", - "tt0117765", - "tt0053108", - "tt0118749", - "tt0460780", - "tt0077696", - "tt0415778", - "tt0087062", - "tt0083064", - "tt0082136", - "tt0082910", - "tt1046947", - "tt4504040", - "tt0069883", - "tt3457734", - "tt2304915", - "tt0102116", - "tt0095925", - "tt0095560", - "tt5773986", - "tt0098205", - "tt0089538", - "tt0046521", - "tt6523174", - "tt3899932", - "tt6793818", - "tt0046535", - "tt1618448", - "tt0086605", - "tt6400632", - "tt4076760", - "tt0055506", - "tt0454919", - "tt3885524", - "tt1085492", - "tt2929652", - "tt0100602", - "tt1567140", - "tt5116410", - "tt5040624", - "tt3858372", - "tt0375568", - "tt5884234", - "tt1465522", - "tt0067454", - "tt1440728", - "tt1403981", - "tt1322312", - "tt1517489", - "tt1314655", - "tt1240982", - "tt0790712", - "tt0117929", - "tt0480255", - "tt0102593", - "tt0472198", - "tt1273678", - "tt0842926", - "tt0403702", - "tt0338459", - "tt1186370", - "tt1023114", - "tt0963966", - "tt0227538", - "tt6313348", - "tt1185416", - "tt0821640", - "tt0762125", - "tt6314690", - "tt0054469", - "tt0152438", - "tt8080578", - "tt5078204", - "tt6186696", - "tt0287717", - "tt6015706", - "tt0116289", - "tt1772240", - "tt0468489", - "tt5018116", - "tt0116384", - "tt7108074", - "tt0489049", - "tt5876412", - "tt2772966", - "tt2288005", - "tt0844286", - "tt0086987", - "tt8522168", - "tt1230204", - "tt0114069", - "tt0120382", - "tt0457419", - "tt2034139", - "tt1152397", - "tt0066206", - "tt0139134", - "tt1320244", - "tt0427152", - "tt2560792", - "tt0364725", - "tt6540078", - "tt5157052", - "tt1715873", - "tt0412536", - "tt0077269", - "tt0452623", - "tt1559040", - "tt0103594", - "tt0090728", - "tt0119164", - "tt0840322", - "tt2375574", - "tt0095088", - "tt0779982", - "tt0419887", - "tt0488085", - "tt0421238", - "tt1410020", - "tt0216216", - "tt0070355", - "tt0443453", - "tt0094077", - "tt5460880", - "tt0107563", - "tt3212904", - "tt0453453", - "tt0117653", - "tt0490086", - "tt1881024", - "tt0061747", - "tt0435705", - "tt0858433", - "tt3779300", - "tt1379177", - "tt0866437", - "tt0405325", - "tt0091949", - "tt0102614", - "tt0065207", - "tt0100514", - "tt0151137", - "tt0960144", - "tt0056197", - "tt1663193", - "tt1919090", - "tt0490204", - "tt1701210", - "tt0061512", - "tt0110490", - "tt0087553", - "tt1109477", - "tt0096101", - "tt0362478", - "tt4216902", - "tt8925724", - "tt0245803", - "tt0129387", - "tt0388795", - "tt7009250", - "tt0195685", - "tt5779650", - "tt7200856", - "tt0308644", - "tt8826626", - "tt4355236", - "tt0068638", - "tt3859310", - "tt0118548", - "tt0053125", - "tt0795493", - "tt1104814", - "tt8595630", - "tt7842764", - "tt1201167", - "tt7936538", - "tt2210463", - "tt8592222", - "tt1078588", - "tt0065938", - "tt1336006", - "tt7620746", - "tt7708146", - "tt0107206", - "tt0119528", - "tt1272886", - "tt0815241", - "tt0079168", - "tt0092783", - "tt0756672", - "tt0079116", - "tt0329162", - "tt3569732", - "tt0473267", - "tt0415833", - "tt0074483", - "tt5618692", - "tt0473553", - "tt0291833", - "tt0245573", - "tt5455410", - "tt1320346", - "tt1198332", - "tt0099871", - "tt1700843", - "tt8163888", - "tt1276110", - "tt0944833", - "tt0292610", - "tt1173687", - "tt4314152", - "tt1148165", - "tt0829098", - "tt1418646", - "tt0307385", - "tt1489246", - "tt0889134", - "tt0790662", - "tt0429115", - "tt0275773", - "tt1299653", - "tt0926380", - "tt1371117", - "tt0814093", - "tt0486652", - "tt0099587", - "tt0775362", - "tt1282024", - "tt0092272", - "tt0428579", - "tt1075746", - "tt0417433", - "tt1176204", - "tt1636539", - "tt0202027", - "tt1560954", - "tt1422032", - "tt1251725", - "tt1376709", - "tt1268970", - "tt0472175", - "tt0790799", - "tt0411475", - "tt1222698", - "tt5618752", - "tt0304636", - "tt0800361", - "tt1313092", - "tt0379240", - "tt1161404", - "tt0795439", - "tt0451102", - "tt1457766", - "tt0081376", - "tt1027683", - "tt0049665", - "tt1261041", - "tt0304711", - "tt1400526", - "tt1477675", - "tt0208298", - "tt0088255", - "tt2243393", - "tt0493451", - "tt1456941", - "tt0302585", - "tt1285216", - "tt3821674", - "tt0107756", - "tt1251761", - "tt0924134", - "tt1283887", - "tt1841594", - "tt0059065", - "tt1237373", - "tt0109809", - "tt1524131", - "tt1473799", - "tt1075749", - "tt0458367", - "tt0245280", - "tt0094671", - "tt5843850", - "tt1730695", - "tt1198396", - "tt1555747", - "tt1571739", - "tt1373149", - "tt0068675", - "tt0118025", - "tt1999141", - "tt4084076", - "tt1260680", - "tt1376404", - "tt6908760", - "tt0096180", - "tt1792799", - "tt4234744", - "tt1686039", - "tt1319699", - "tt0067924", - "tt1839648", - "tt1912981", - "tt1135493", - "tt1438216", - "tt0978762", - "tt2073154", - "tt1433915", - "tt1337137", - "tt0073864", - "tt1738421", - "tt0068713", - "tt1322306", - "tt0131400", - "tt1650056", - "tt1568924", - "tt0133751", - "tt0059095", - "tt3814808", - "tt5516328", - "tt7689964", - "tt0089360", - "tt5436228", - "tt6306064", - "tt1720616", - "tt0133142", - "tt1714861", - "tt6238896", - "tt1742023", - "tt1600207", - "tt1590960", - "tt2140141", - "tt1531914", - "tt2214941", - "tt0092618", - "tt1730294", - "tt1777725", - "tt0110729", - "tt0145547", - "tt1235189", - "tt0076538", - "tt1570559", - "tt0443435", - "tt0284978", - "tt3074780", - "tt2483516", - "tt0109444", - "tt1258922", - "tt2119474", - "tt1668200", - "tt2322641", - "tt3125324", - "tt0458413", - "tt2583690", - "tt1524575", - "tt1776086", - "tt1411664", - "tt1420554", - "tt0072626", - "tt1666801", - "tt1447972", - "tt1620449", - "tt2788716", - "tt0085210", - "tt2279373", - "tt0283111", - "tt2236054", - "tt0092904", - "tt4183692", - "tt2250234", - "tt0072409", - "tt2132285", - "tt0105112", - "tt1372686", - "tt1876451", - "tt1758795", - "tt2150511", - "tt1311060", - "tt0084694", - "tt1716777", - "tt2626460", - "tt0067419", - "tt5568164", - "tt0070736", - "tt7874378", - "tt0070436", - "tt1839654", - "tt1814621", - "tt6484086", - "tt3829378", - "tt5687380", - "tt1972819", - "tt1711425", - "tt0101493", - "tt1205537", - "tt1433811", - "tt0116247", - "tt1210106", - "tt0075433", - "tt1436571", - "tt0083906", - "tt7689908", - "tt0085253", - "tt0068450", - "tt0164184", - "tt0215960", - "tt0099810", - "tt5164184", - "tt3109830", - "tt4334642", - "tt0109858", - "tt5351458", - "tt0108260", - "tt0091560", - "tt0068498", - "tt0090915", - "tt0102043", - "tt0085434", - "tt1743993", - "tt0087100", - "tt0062141", - "tt0053806", - "tt0400146", - "tt0059447", - "tt0061556", - "tt0055779", - "tt1078597", - "tt0110410", - "tt1424432", - "tt0065700", - "tt1465491", - "tt0054698", - "tt0080516", - "tt0460890", - "tt1700263", - "tt0096142", - "tt0095299", - "tt0095774", - "tt0051554", - "tt0317676", - "tt0847825", - "tt0076843", - "tt1555024", - "tt1533013", - "tt0093546", - "tt1429411", - "tt1465519", - "tt0196158", - "tt0067037", - "tt1721677", - "tt1656257", - "tt1219336", - "tt0256524", - "tt1728975", - "tt0054022", - "tt0080798", - "tt1653700", - "tt1865484", - "tt1658851", - "tt0362165", - "tt0049092", - "tt0120851", - "tt1274596", - "tt1032825", - "tt4061908", - "tt2136808", - "tt0462721", - "tt0052724", - "tt0079576", - "tt0369360", - "tt0279111", - "tt0463029", - "tt0102015", - "tt1230206", - "tt1193473", - "tt1703148", - "tt0078456", - "tt6212478", - "tt1365483", - "tt0196216", - "tt0113819", - "tt1730704", - "tt1688653", - "tt7139246", - "tt1747967", - "tt1153106", - "tt1633245", - "tt4114630", - "tt0104802", - "tt6813892", - "tt5619332", - "tt1912996", - "tt1492705", - "tt5165620", - "tt0088206", - "tt1059969", - "tt1680305", - "tt0095801", - "tt4682788", - "tt1743375", - "tt1640570", - "tt0077531", - "tt1727506", - "tt0051398", - "tt0099291", - "tt1389127", - "tt1786497", - "tt0446750", - "tt1221207", - "tt0458485", - "tt2062661", - "tt0035423", - "tt0129775", - "tt0055312", - "tt1820723", - "tt1657299", - "tt2175927", - "tt0099365", - "tt1600197", - "tt0057840", - "tt0465494", - "tt2250054", - "tt2102472", - "tt0066249", - "tt0063415", - "tt0086312", - "tt0046949", - "tt1251743", - "tt1876277", - "tt0091369", - "tt0077921", - "tt0095082", - "tt0072820", - "tt0073906", - "tt0091860", - "tt0072608", - "tt0074695", - "tt5738064", - "tt0889588", - "tt0067803", - "tt6652708", - "tt4158594", - "tt0098546", - "tt0119008", - "tt0238112", - "tt0104107", - "tt0058212", - "tt0077416", - "tt0059575", - "tt6488870", - "tt0055892", - "tt0093200", - "tt0093776", - "tt6505968", - "tt0124298", - "tt0066858", - "tt0079668", - "tt0082432", - "tt0109303", - "tt0068540", - "tt0082846", - "tt0125022", - "tt1130969", - "tt0080408", - "tt0066982", - "tt0061328", - "tt0102103", - "tt0058265", - "tt0084865", - "tt7076834", - "tt0155711", - "tt0075334", - "tt0045302", - "tt0107497", - "tt3548028", - "tt5628302", - "tt0076660", - "tt0102494", - "tt0053579", - "tt0113677", - "tt0056930", - "tt4372390", - "tt0105046", - "tt0049434", - "tt0080025", - "tt0065488", - "tt0360130", - "tt0068575", - "tt0067411", - "tt0039482", - "tt0053729", - "tt0107130", - "tt0076095", - "tt0139668", - "tt0052735", - "tt0061184", - "tt0058571", - "tt1703957", - "tt0118768", - "tt0036092", - "tt0094606", - "tt0087001", - "tt0061789", - "tt7046826", - "tt0100395", - "tt0345061", - "tt0161492", - "tt0108122", - "tt0049966", - "tt0106449", - "tt6053438", - "tt0097100", - "tt1151410", - "tt0119501", - "tt0055100", - "tt3864024", - "tt0088760", - "tt0087594", - "tt0031311", - "tt1210359", - "tt0276329", - "tt3249478", - "tt7328908", - "tt6776572", - "tt2924392", - "tt0094620", - "tt1836212", - "tt6857166", - "tt0079714", - "tt0111309", - "tt0352230", - "tt0087482", - "tt0973785", - "tt0084272", - "tt0047152", - "tt0106673", - "tt0109506", - "tt0151785", - "tt3121474", - "tt4532428", - "tt0098206", - "tt0113243", - "tt0096018", - "tt0243655", - "tt7974772", - "tt3720058", - "tt0066996", - "tt0070674", - "tt0199354", - "tt0055253", - "tt4876334", - "tt0077357", - "tt0071628", - "tt0189584", - "tt0081633", - "tt7675596", - "tt1576699", - "tt2028550", - "tt0118111", - "tt0352277", - "tt0116650", - "tt0433412", - "tt1031241", - "tt1362103", - "tt0054135", - "tt7566244", - "tt0093693", - "tt3364264", - "tt0060164", - "tt0867334", - "tt0020876", - "tt0064688", - "tt0055047", - "tt0264365", - "tt0436364", - "tt0070556", - "tt0062805", - "tt1614408", - "tt0032840", - "tt1273241", - "tt1462758", - "tt1307065", - "tt0059245", - "tt0317132", - "tt1281966", - "tt0052902", - "tt0120199", - "tt1553659", - "tt0084171", - "tt0483154", - "tt5540992", - "tt0055623", - "tt0114666", - "tt0110997", - "tt0059219", - "tt3739110", - "tt3203528", - "tt0327210", - "tt1425253", - "tt0057569", - "tt0069464", - "tt0352394", - "tt0067620", - "tt7167658", - "tt0429591", - "tt0059727", - "tt0051411", - "tt0089308", - "tt7335008", - "tt7341610", - "tt0366762", - "tt7762772", - "tt6608976", - "tt6697760", - "tt0103184", - "tt8236394", - "tt0053041", - "tt0083133", - "tt0380787", - "tt1206082", - "tt0106453", - "tt1554092", - "tt6740584", - "tt1104779", - "tt6410564", - "tt1461677", - "tt0194710", - "tt7220754", - "tt0056983", - "tt1474276", - "tt0067741", - "tt1129442", - "tt2164468", - "tt0091282", - "tt0165929", - "tt0068509", - "tt1434435", - "tt5607714", - "tt1925479", - "tt6190198", - "tt1971403", - "tt0087932", - "tt6383726", - "tt0095288", - "tt0065243", - "tt0071523", - "tt0066540", - "tt0059252", - "tt1641975", - "tt0079550", - "tt0120769", - "tt1137450", - "tt0364990", - "tt0068596", - "tt0462396", - "tt3316302", - "tt0125806", - "tt6173644", - "tt0083628", - "tt0109578", - "tt0448154", - "tt7106414", - "tt0092857", - "tt3464744", - "tt4071086", - "tt0083111", - "tt3717068", - "tt5061162", - "tt4319082", - "tt1381508", - "tt0486541", - "tt2185384", - "tt0844794", - "tt2630336", - "tt0109093", - "tt0095690", - "tt6777370", - "tt1024744", - "tt0260987", - "tt0339840", - "tt0056800", - "tt2387513", - "tt0090094", - "tt6495770", - "tt0268978", - "tt6270524", - "tt1559033", - "tt0089839", - "tt0054997", - "tt2370230", - "tt0082307", - "tt0091647", - "tt0118843", - "tt0356470", - "tt1470021", - "tt0075232", - "tt3465074", - "tt5657280", - "tt1558246", - "tt0123964", - "tt0104040", - "tt6195094", - "tt0097613", - "tt4412082", - "tt0847182", - "tt1504403", - "tt0060904", - "tt1352388", - "tt1253596", - "tt0063157", - "tt0099409", - "tt1148779", - "tt1414378", - "tt5085924", - "tt1438534", - "tt1528718", - "tt5344086", - "tt0092964", - "tt0242622", - "tt4575328", - "tt1020559", - "tt6452332", - "tt0065421", - "tt1629439", - "tt0450336", - "tt1590950", - "tt1727816", - "tt0078935", - "tt5170810", - "tt0858411", - "tt1664894", - "tt1386925", - "tt1410051", - "tt0112541", - "tt1548635", - "tt1781775", - "tt7197298", - "tt1714208", - "tt1764726", - "tt0053935", - "tt0034570", - "tt0025493", - "tt1528312", - "tt0024763", - "tt0039178", - "tt1524134", - "tt0026739", - "tt1422800", - "tt1727358", - "tt2092011", - "tt6210996", - "tt2113809", - "tt1711366", - "tt7238392", - "tt1764198", - "tt1606180", - "tt1590089", - "tt0062377", - "tt1273207", - "tt1623765", - "tt1795702", - "tt0112744", - "tt0103855", - "tt1700844", - "tt1515199", - "tt1642665", - "tt6738136", - "tt0932669", - "tt1658820", - "tt0082427", - "tt5961906", - "tt0025004", - "tt0118308", - "tt1788391", - "tt0077280", - "tt0066122", - "tt0026014", - "tt1727258", - "tt0028873", - "tt1905040", - "tt0063443", - "tt2076897", - "tt0082933", - "tt6172666", - "tt6539470", - "tt1172233", - "tt0042876", - "tt0060841", - "tt0108255", - "tt0047191", - "tt4847546", - "tt0031750", - "tt4103724", - "tt1965065", - "tt1691453", - "tt0033677", - "tt0040474", - "tt0049369", - "tt0054989", - "tt0070656", - "tt0064379", - "tt0050438", - "tt0082484", - "tt0072233", - "tt0080707", - "tt0053677", - "tt0089913", - "tt5610554", - "tt1588398", - "tt0033555", - "tt0062037", - "tt0074991", - "tt0066518", - "tt0030696", - "tt0084234", - "tt0027428", - "tt0054790", - "tt0026184", - "tt0031000", - "tt0028575", - "tt0031133", - "tt0032416", - "tt1181795", - "tt0033554", - "tt0096866", - "tt0497465", - "tt5961314", - "tt0032415", - "tt0354766", - "tt1836808", - "tt0068284", - "tt1002992", - "tt1422136", - "tt2436452", - "tt1440161", - "tt0057226", - "tt0056277", - "tt2902898", - "tt0062833", - "tt1809287", - "tt0068503", - "tt1760967", - "tt0057919", - "tt1602472", - "tt1594917", - "tt5175970", - "tt0059014", - "tt1440732", - "tt4198316", - "tt1042877", - "tt2061712", - "tt0060548", - "tt0049317", - "tt0456144", - "tt5859238", - "tt1767272", - "tt0358082", - "tt0186975", - "tt0465538", - "tt0795438", - "tt0800240", - "tt1920860", - "tt0120894", - "tt1111948", - "tt0493464", - "tt0482599", - "tt3104304", - "tt0416212", - "tt0949731", - "tt1023111", - "tt0981227", - "tt0864761", - "tt2646378", - "tt0852713", - "tt2192016", - "tt0078504", - "tt1073498", - "tt0831887", - "tt0104438", - "tt0029608", - "tt0483607", - "tt0420238", - "tt7529472", - "tt0430922", - "tt0286106", - "tt6645154", - "tt5894846", - "tt0084266", - "tt0817538", - "tt0342769", - "tt0106386", - "tt0048380", - "tt0031608", - "tt0424908", - "tt0995039", - "tt5078188", - "tt0469903", - "tt0033891", - "tt2246953", - "tt1791614", - "tt5882982", - "tt6295898", - "tt0057578", - "tt0119891", - "tt0074739", - "tt0280590", - "tt0145734", - "tt0164212", - "tt0481536", - "tt0087981", - "tt1393742", - "tt0333766", - "tt1129381", - "tt1122775", - "tt0142342", - "tt3063364", - "tt0098180", - "tt0076162", - "tt2114504", - "tt0942384", - "tt0041594", - "tt0057227", - "tt0047148", - "tt0120679", - "tt1231586", - "tt1801552", - "tt0186894", - "tt0048314", - "tt0133046", - "tt0437857", - "tt0274558", - "tt0114660", - "tt0031377", - "tt0301199", - "tt0124179", - "tt0880578", - "tt1315981", - "tt0067418", - "tt0064539", - "tt1583421", - "tt4034228", - "tt2494280", - "tt1323598", - "tt1153040", - "tt6000478", - "tt0095188", - "tt0368563", - "tt1114680", - "tt0117603", - "tt0273517", - "tt1122836", - "tt0091064", - "tt0114287", - "tt0490084", - "tt0075648", - "tt1072437", - "tt1046173", - "tt1238291", - "tt1667321", - "tt0022913", - "tt0032353", - "tt0087957", - "tt8362726", - "tt0875575", - "tt0025028", - "tt1324027", - "tt0067104", - "tt0091474", - "tt0080024", - "tt1303828", - "tt1274273", - "tt0819714", - "tt0071431", - "tt0028203", - "tt0049264", - "tt1226236", - "tt1134664", - "tt0105643", - "tt1200272", - "tt5099660", - "tt7284066", - "tt0054443", - "tt0103759", - "tt0036776", - "tt5427194", - "tt1295072", - "tt5314118", - "tt0374102", - "tt4839414", - "tt3696126", - "tt0031299", - "tt0082186", - "tt0042848", - "tt0264323", - "tt0053622", - "tt0470055", - "tt0144964", - "tt4080768", - "tt0022639", - "tt0028872", - "tt0028757", - "tt0026144", - "tt0039174", - "tt0057254", - "tt5253754", - "tt0102034", - "tt0120484", - "tt1043860", - "tt0073812", - "tt8743180", - "tt0085255", - "tt0049922", - "tt0837106", - "tt0089670", - "tt1210039", - "tt0085384", - "tt0050197", - "tt0101590", - "tt1198403", - "tt1453245", - "tt0028767", - "tt1247704", - "tt0110027", - "tt0038549", - "tt0138524", - "tt0066026", - "tt0086980", - "tt0092530", - "tt0402910", - "tt2413516", - "tt0475394", - "tt0311361", - "tt1319743", - "tt0051196", - "tt0066832", - "tt1642193", - "tt0056262", - "tt0204946", - "tt1079980", - "tt0103035", - "tt1017464", - "tt1349482", - "tt0867295", - "tt0976246", - "tt1252380", - "tt0079103", - "tt0299981", - "tt0108593", - "tt0151073", - "tt1156173", - "tt1509109", - "tt1381512", - "tt0844330", - "tt1179947", - "tt0063715", - "tt0096511", - "tt0107362", - "tt0265662", - "tt0175680", - "tt0108187", - "tt0120109", - "tt0117621", - "tt8327396", - "tt0097531", - "tt0063032", - "tt1157605", - "tt1546036", - "tt2561546", - "tt0111156", - "tt0120111", - "tt0114418", - "tt0117620", - "tt0427528", - "tt0200550", - "tt0130018", - "tt0110255", - "tt0108108", - "tt0117622", - "tt7704710", - "tt0304415", - "tt0114417", - "tt0120110", - "tt2009606", - "tt0119345", - "tt0497137", - "tt0111157", - "tt0033254", - "tt0136376", - "tt0108107", - "tt6039294", - "tt0098022", - "tt0111158", - "tt4685806", - "tt0114416", - "tt7029854", - "tt1181849", - "tt0480002", - "tt0067809", - "tt0062380", - "tt3302706", - "tt0082748", - "tt0048339", - "tt0083550", - "tt3181920", - "tt3593046", - "tt0060736", - "tt0059269", - "tt0062737", - "tt0963178", - "tt3175038", - "tt3155242", - "tt0076504", - "tt1055366", - "tt0099710", - "tt2597718", - "tt1031280", - "tt2404299", - "tt0105391", - "tt0349683", - "tt0078767", - "tt0078158", - "tt0382992", - "tt0074281", - "tt0808244", - "tt0480242", - "tt0365737", - "tt2145829", - "tt1198138", - "tt0073778", - "tt6335734", - "tt2802136", - "tt3704050", - "tt2178470", - "tt0095709", - "tt1135487", - "tt5871318", - "tt0398375", - "tt5670152", - "tt0080861", - "tt1402488", - "tt1082853", - "tt0396707", - "tt0316396", - "tt0910936", - "tt0120890", - "tt7027850", - "tt2402101", - "tt0492956", - "tt0489237", - "tt0486578", - "tt1117563", - "tt1247692", - "tt0292963", - "tt1318044", - "tt2937898", - "tt0473356", - "tt4607748", - "tt0821642", - "tt1095174", - "tt1486193", - "tt0795421", - "tt0841046", - "tt1045778", - "tt0811080", - "tt1226774", - "tt1034303", - "tt0988595", - "tt0467200", - "tt0858479", - "tt0096933", - "tt1033643", - "tt0445953", - "tt1135985", - "tt0857191", - "tt0366548", - "tt5466186", - "tt0457297", - "tt0951216", - "tt0791309", - "tt0481797", - "tt0074963", - "tt0489664", - "tt1014775", - "tt0432402", - "tt1155056", - "tt0059319", - "tt1068680", - "tt1075417", - "tt0467406", - "tt0806147", - "tt4967220", - "tt1129423", - "tt0358273", - "tt0780567", - "tt1313113", - "tt0954981", - "tt0058777", - "tt0988849", - "tt1023500", - "tt1235124", - "tt1082601", - "tt1121931", - "tt0808279", - "tt0758771", - "tt1563742", - "tt1700808", - "tt0423294", - "tt0457400", - "tt0029606", - "tt0815178", - "tt0495208", - "tt0479968", - "tt0758786", - "tt1130088", - "tt1877543", - "tt0768218", - "tt1282041", - "tt0844708", - "tt0901476", - "tt1093908", - "tt0420015", - "tt0870111", - "tt0780571", - "tt1637687", - "tt1323562", - "tt0435528", - "tt1020885", - "tt0393162", - "tt0373051", - "tt1554414", - "tt0375210", - "tt0074954", - "tt1127715", - "tt0381849", - "tt0865556", - "tt0964587", - "tt0839980", - "tt0452625", - "tt1226271", - "tt1131749", - "tt1151922", - "tt0426592", - "tt3302962", - "tt0246894", - "tt0051214", - "tt5545254", - "tt0307072", - "tt2186848", - "tt0416508", - "tt1314177", - "tt0896866", - "tt0284450", - "tt4940416", - "tt0760329", - "tt1182609", - "tt0072281", - "tt2901896", - "tt0050317", - "tt0094057", - "tt2049483", - "tt0429715", - "tt0393394", - "tt1764581", - "tt1990216", - "tt1291150", - "tt0790665", - "tt1331022", - "tt0800367", - "tt1151928", - "tt0902281", - "tt1045191", - "tt6735670", - "tt0094846", - "tt1090360", - "tt1109583", - "tt0076150", - "tt0063581", - "tt0477095", - "tt0057187", - "tt0090060", - "tt1076252", - "tt1183908", - "tt0096764", - "tt7479784", - "tt1185431", - "tt1731697", - "tt0410097", - "tt0087075", - "tt0207201", - "tt0799934", - "tt0480025", - "tt0372873", - "tt1300853", - "tt6399158", - "tt1126596", - "tt0379889", - "tt0445946", - "tt1294699", - "tt0403407", - "tt2467046", - "tt0054756", - "tt0067810", - "tt0335438", - "tt0455538", - "tt0465602", - "tt2518190", - "tt0402743", - "tt3748540", - "tt1068678", - "tt0104145", - "tt0418819", - "tt0219965", - "tt0097138", - "tt8269140", - "tt0099740", - "tt3144226", - "tt0115624", - "tt0068722", - "tt0787475", - "tt1020530", - "tt0416236", - "tt6170804", - "tt0057577", - "tt0499487", - "tt0385752", - "tt0070034", - "tt0137494", - "tt0223208", - "tt0449010", - "tt2039338", - "tt0037099", - "tt1093369", - "tt6772950", - "tt0478073", - "tt0901507", - "tt0037098", - "tt0355295", - "tt0427392", - "tt0292506", - "tt0092772", - "tt0099703", - "tt0035096", - "tt0785012", - "tt0032818", - "tt5805470", - "tt0103772", - "tt0092106", - "tt0427969", - "tt0093137", - "tt0409182", - "tt0074452", - "tt1185264", - "tt0416315", - "tt0446013", - "tt0425413", - "tt0443456", - "tt0210065", - "tt0461770", - "tt0079117", - "tt3037110", - "tt1901024", - "tt3079752", - "tt0419372", - "tt6904062", - "tt0056943", - "tt1172206", - "tt0093605", - "tt7875604", - "tt0188041", - "tt5194504", - "tt2382298", - "tt0102721", - "tt0057693", - "tt0087414", - "tt2784678", - "tt0073026", - "tt0340163", - "tt0061523", - "tt0078056", - "tt0095304", - "tt0094612", - "tt4976192", - "tt6596796", - "tt4494230", - "tt0100530", - "tt0072653", - "tt1276105", - "tt0762073", - "tt5958060", - "tt2796836", - "tt0073113", - "tt0042855", - "tt3480796", - "tt0091306", - "tt1664825", - "tt0454846", - "tt0821486", - "tt2420756", - "tt0065566", - "tt2172584", - "tt0068853", - "tt1661820", - "tt1403241", - "tt2693664", - "tt2073086", - "tt0077539", - "tt0054084", - "tt2924488", - "tt0100842", - "tt0082118", - "tt0053219", - "tt0330229", - "tt0454776", - "tt3344922", - "tt0064030", - "tt0060121", - "tt0098724", - "tt0105477", - "tt0110763", - "tt0053796", - "tt0114214", - "tt1999987", - "tt2193418", - "tt0049055", - "tt8159584", - "tt0338466", - "tt1174042", - "tt0282209", - "tt0260866", - "tt1876330", - "tt3199006", - "tt0384286", - "tt2276069", - "tt0488988", - "tt0117705", - "tt0029611", - "tt3688342", - "tt1839642", - "tt2404461", - "tt0878814", - "tt6989180", - "tt6850968", - "tt0104888", - "tt0065744", - "tt0081562", - "tt0060445", - "tt7167602", - "tt0066767", - "tt0069697", - "tt0067987", - "tt2006810", - "tt0236493", - "tt0102070", - "tt0246989", - "tt0066344", - "tt1726589", - "tt0089791", - "tt1233334", - "tt1312254", - "tt1435513", - "tt0080453", - "tt1130964", - "tt0105691", - "tt0305669", - "tt1212454", - "tt0097714", - "tt0045109", - "tt0111590", - "tt1296373", - "tt1227787", - "tt0117979", - "tt1674775", - "tt1407065", - "tt0126250", - "tt0345551", - "tt0062886", - "tt0098282", - "tt0160611", - "tt0117628", - "tt4983630", - "tt5495726", - "tt0200800", - "tt0101985", - "tt6288650", - "tt1450330", - "tt0112585", - "tt2075340", - "tt0027478", - "tt5432188", - "tt0304262", - "tt2661382", - "tt1538221", - "tt0104254", - "tt1213929", - "tt5517370", - "tt0056195", - "tt0104627", - "tt0104427", - "tt7160070", - "tt0064940", - "tt1720182", - "tt0431420", - "tt0800095", - "tt0498360", - "tt2359137", - "tt1315216", - "tt1064884", - "tt0905345", - "tt5140248", - "tt0108551", - "tt0118956", - "tt1894561", - "tt1921070", - "tt0093277", - "tt2023453", - "tt0269341", - "tt1270277", - "tt5846644", - "tt1196141", - "tt1368491", - "tt0811137", - "tt0036733", - "tt1022603", - "tt1650043", - "tt0051750", - "tt0069332", - "tt1449175", - "tt1628055", - "tt2905082", - "tt0120768", - "tt5083736", - "tt5119116", - "tt4341582", - "tt0051808", - "tt0049117", - "tt1015987", - "tt3168230", - "tt1386588", - "tt0859635", - "tt1078940", - "tt1613750", - "tt0120696", - "tt0404390", - "tt1242545", - "tt0402399", - "tt0065588", - "tt1135503", - "tt0913354", - "tt0158983", - "tt0410403", - "tt1465499", - "tt0252076", - "tt1236484", - "tt1533084", - "tt0494864", - "tt1142433", - "tt3894558", - "tt0811106", - "tt1106860", - "tt1241017", - "tt0796212", - "tt1037004", - "tt1294136", - "tt1131747", - "tt0093886", - "tt0155267", - "tt6802896", - "tt6791096", - "tt1027762", - "tt2137359", - "tt1487275", - "tt0061994", - "tt0100456", - "tt1884457", - "tt0082979", - "tt0883995", - "tt1397498", - "tt0299658", - "tt2707810", - "tt0072354", - "tt5104604", - "tt0385990", - "tt1523372", - "tt1063056", - "tt0412080", - "tt0441774", - "tt1228933", - "tt0912597", - "tt1104806", - "tt0823635", - "tt0365109", - "tt0922547", - "tt1010055", - "tt0765458", - "tt0887719", - "tt0461703", - "tt0119051", - "tt1392197", - "tt0037627", - "tt1125929", - "tt0070684", - "tt0013750", - "tt4026570", - "tt8013990", - "tt0492754", - "tt0384806", - "tt0901504", - "tt0098321", - "tt1205535", - "tt1286147", - "tt0063063", - "tt1146350", - "tt0116483", - "tt0959329", - "tt5729348", - "tt1181919", - "tt3517306", - "tt5270948", - "tt0115736", - "tt1303902", - "tt1421051", - "tt1275861", - "tt0416496", - "tt1320296", - "tt0997152", - "tt0493421", - "tt0104558", - "tt1092082", - "tt0493424", - "tt0896923", - "tt0079946", - "tt0118845", - "tt0464799", - "tt7372728", - "tt0165798", - "tt0059607", - "tt0079642", - "tt0091406", - "tt0875025", - "tt1606339", - "tt0052225", - "tt0358294", - "tt4554212", - "tt0078480", - "tt5247704", - "tt1130981", - "tt1393746", - "tt1535495", - "tt0365686", - "tt4515762", - "tt4537986", - "tt0103305", - "tt4432006", - "tt5752360", - "tt0067950", - "tt4060006", - "tt0094812", - "tt0412019", - "tt0112288", - "tt1250777", - "tt0095776", - "tt0338337", - "tt1202522", - "tt0910905", - "tt0066473", - "tt1374992", - "tt0387877", - "tt1098356", - "tt1248971", - "tt0818165", - "tt0087544", - "tt0120863", - "tt6610574", - "tt0263101", - "tt1121096", - "tt0119432", - "tt1650554", - "tt0974613", - "tt0906734", - "tt4586626", - "tt3465026", - "tt7781732", - "tt0077869", - "tt1227931", - "tt4287470", - "tt0499537", - "tt0073629", - "tt1107860", - "tt0367479", - "tt0065019", - "tt0940656", - "tt1181920", - "tt0464041", - "tt0099348", - "tt0300471", - "tt3986820", - "tt0079540", - "tt0351977", - "tt1103275", - "tt0375063", - "tt1098327", - "tt5198670", - "tt0887971", - "tt0962711", - "tt0294357", - "tt0190374", - "tt0240510", - "tt0861689", - "tt1186830", - "tt0113451", - "tt1119191", - "tt0042004", - "tt0184526", - "tt1666700", - "tt0298203", - "tt5737582", - "tt0824747", - "tt1134674", - "tt0300556", - "tt1567609", - "tt5737536", - "tt0922642", - "tt0065547", - "tt0302886", - "tt1147687", - "tt2333508", - "tt1326260", - "tt1176724", - "tt0058142", - "tt1001548", - "tt1735485", - "tt0438052", - "tt0070109", - "tt1288635", - "tt1478338", - "tt1658837", - "tt0810945", - "tt0479537", - "tt1045670", - "tt0149261", - "tt1001508", - "tt0068833", - "tt0103786", - "tt0076297", - "tt0066167", - "tt0247745", - "tt0065509", - "tt0048919", - "tt0435623", - "tt4652532", - "tt0113228", - "tt0055774", - "tt0107050", - "tt0069109", - "tt0065150", - "tt0473488", - "tt1034302", - "tt0343135", - "tt6298600", - "tt0106266", - "tt4377864", - "tt3652862", - "tt1187064", - "tt0819755", - "tt1259571", - "tt0123122", - "tt0070169", - "tt5700176", - "tt5851786", - "tt1045772", - "tt0055278", - "tt0059896", - "tt1325004", - "tt0057809", - "tt0099892", - "tt0051776", - "tt2268433", - "tt0327137", - "tt0059399", - "tt1286537", - "tt0086022", - "tt0060095", - "tt0116996", - "tt1313104", - "tt0049004", - "tt0285742", - "tt2950418", - "tt0052700", - "tt0050699", - "tt6958212", - "tt0099373", - "tt0351817", - "tt0053645", - "tt0096926", - "tt6964172", - "tt0090274", - "tt3748512", - "tt0058997", - "tt0060355", - "tt6073176", - "tt0068168", - "tt0106965", - "tt0072856", - "tt0109446", - "tt0093713", - "tt0058263", - "tt0093648", - "tt3611002", - "tt0055719", - "tt0384642", - "tt8179218", - "tt5360996", - "tt0410650", - "tt0141897", - "tt0112443", - "tt0110216", - "tt6513656", - "tt0085615", - "tt0071706", - "tt5137986", - "tt6078840", - "tt2531344", - "tt0055558", - "tt0064961", - "tt0062472", - "tt0099743", - "tt0097626", - "tt0084116", - "tt0072274", - "tt6157626", - "tt0116778", - "tt8049858", - "tt0059448", - "tt0069029", - "tt0779276", - "tt4640206", - "tt0844894", - "tt0070013", - "tt0068448", - "tt0327679", - "tt0056217", - "tt0061024", - "tt0120841", - "tt0082158", - "tt5569344", - "tt0243155", - "tt4669264", - "tt0171359", - "tt0783238", - "tt0048545", - "tt0087909", - "tt0098061", - "tt0372588", - "tt4463816", - "tt0425601", - "tt0051055", - "tt0862846", - "tt0062952", - "tt0097815", - "tt0249751", - "tt0120751", - "tt2673812", - "tt0899128", - "tt0264616", - "tt0119738", - "tt0049261", - "tt0088100", - "tt7375578", - "tt0063458", - "tt5795086", - "tt0434139", - "tt4538916", - "tt0068156", - "tt5473090", - "tt0080603", - "tt0452637", - "tt0093771", - "tt3303310", - "tt0158714", - "tt0102138", - "tt0065377", - "tt0420223", - "tt0057427", - "tt1893195", - "tt0349825", - "tt5616294", - "tt3700038", - "tt0069427", - "tt0425061", - "tt0118694", - "tt0188674", - "tt6423776", - "tt0064505", - "tt1482459", - "tt0074156", - "tt0116209", - "tt0338763", - "tt2381941", - "tt8004552", - "tt0065168", - "tt0190332", - "tt6403680", - "tt0266308", - "tt0074896", - "tt0271668", - "tt0804529", - "tt0065622", - "tt8081748", - "tt0078109", - "tt0004936", - "tt0276830", - "tt0042530", - "tt0310793", - "tt1074929", - "tt0052738", - "tt0007476", - "tt0048605", - "tt1465533", - "tt0182260", - "tt0295018", - "tt0819785", - "tt0424205", - "tt8577370", - "tt6071534", - "tt0054428", - "tt8457294", - "tt0097050", - "tt8474090", - "tt6039372", - "tt0970411", - "tt0027511", - "tt0093640", - "tt0108147", - "tt0067756", - "tt0249462", - "tt0089208", - "tt0062168", - "tt0071502", - "tt0105417", - "tt0245712", - "tt0804516", - "tt0099329", - "tt0317198", - "tt0870090", - "tt0056371", - "tt0451079", - "tt0060908", - "tt0067866", - "tt6269658", - "tt0114576", - "tt0056264", - "tt0078916", - "tt0095953", - "tt0073461", - "tt0078034", - "tt0253556", - "tt0085482", - "tt1190539", - "tt0080661", - "tt1582248", - "tt0913445", - "tt1456472", - "tt0101640", - "tt0073012", - "tt0833557", - "tt1521090", - "tt0070849", - "tt0069920", - "tt0310775", - "tt0102803", - "tt0084390", - "tt0056058", - "tt0485947", - "tt0064679", - "tt0092699", - "tt0768120", - "tt0127723", - "tt1302067", - "tt0845046", - "tt0235198", - "tt0103767", - "tt0080902", - "tt0409681", - "tt0096160", - "tt0078721", - "tt0056193", - "tt7167630", - "tt1612774", - "tt0074958", - "tt1054606", - "tt0332280", - "tt0069945", - "tt0059113", - "tt0076725", - "tt1666186", - "tt0109686", - "tt1046183", - "tt0063285", - "tt0113118", - "tt0055184", - "tt0097162", - "tt0067328", - "tt3297382", - "tt1281374", - "tt0181984", - "tt0120891", - "tt6017172", - "tt0427998", - "tt0301727", - "tt5518756", - "tt1512685", - "tt0138704", - "tt0800039", - "tt0081071", - "tt1134629", - "tt1337057", - "tt0138946", - "tt0005074", - "tt0006313", - "tt0048507", - "tt0120188", - "tt1356864", - "tt4399952", - "tt0006177", - "tt0878835", - "tt0005542", - "tt6367558", - "tt3356434", - "tt8483628", - "tt0049223", - "tt6957170", - "tt6791074", - "tt6957104", - "tt0089755", - "tt0116477", - "tt7130994", - "tt3408558", - "tt6528098", - "tt6977830", - "tt1584016", - "tt0073582", - "tt0066279", - "tt0054167", - "tt0396269", - "tt6444838", - "tt2198824", - "tt0832266", - "tt0117666", - "tt1193138", - "tt0074102", - "tt4279116", - "tt0108333", - "tt0089603", - "tt0120877", - "tt5001456", - "tt0496634", - "tt0074211", - "tt1674771", - "tt0808357", - "tt0264472", - "tt0775539", - "tt1024255", - "tt1010035", - "tt0896815", - "tt6654316", - "tt0093010", - "tt0251127", - "tt0104952", - "tt5181852", - "tt1492820", - "tt6131672", - "tt0163818", - "tt5715874", - "tt0088011", - "tt0169547", - "tt4465438", - "tt7205938", - "tt0088258", - "tt1523267", - "tt0108525", - "tt0074851", - "tt0057012", - "tt1124039", - "tt0492044", - "tt1261862", - "tt0914863", - "tt0976051", - "tt0112461", - "tt0970452", - "tt3152624", - "tt1318514", - "tt0117577", - "tt3450958", - "tt0133152", - "tt2397535", - "tt0316356", - "tt1032819", - "tt5655222", - "tt5814592", - "tt3053228", - "tt1381418", - "tt1458169", - "tt5657846", - "tt5649144", - "tt1646987", - "tt0907657", - "tt5715410", - "tt4857264", - "tt4633690", - "tt5420886", - "tt3203606", - "tt0104684", - "tt5476182", - "tt1301990", - "tt1536537", - "tt2674454", - "tt3413018", - "tt1139592", - "tt0105793", - "tt5462602", - "tt1596363", - "tt5721088", - "tt4899370", - "tt5442430", - "tt0349903", - "tt1758810", - "tt2582782", - "tt3564472", - "tt4131800", - "tt0313542", - "tt6304162", - "tt2582502", - "tt0496806", - "tt0114369", - "tt0472062", - "tt0118928", - "tt6538416", - "tt0097775", - "tt6063050", - "tt0357413", - "tt0077631", - "tt0332379", - "tt1399683", - "tt0462538", - "tt0289765", - "tt0460791", - "tt0087182", - "tt0119488", - "tt0449467", - "tt0402022", - "tt0361862", - "tt1306980", - "tt0432283", - "tt0084649", - "tt1190536", - "tt0181875", - "tt0066434", - "tt0120601", - "tt0375912", - "tt6147260", - "tt1139668", - "tt0125439", - "tt0106856", - "tt0093821", - "tt0115012", - "tt1155705", - "tt0110475", - "tt1535616", - "tt0067992", - "tt0108037", - "tt0073486", - "tt1860213", - "tt0233469", - "tt0384793", - "tt1279935", - "tt1186367", - "tt1460743", - "tt1463188", - "tt1734433", - "tt1442571", - "tt1135084", - "tt0309698", - "tt0335266", - "tt0959337", - "tt0434409", - "tt1538401", - "tt0464154", - "tt0962736", - "tt1345525", - "tt1336617", - "tt1185616", - "tt0783233", - "tt0472043", - "tt1152836", - "tt1329101", - "tt1263670", - "tt1038686", - "tt0050562", - "tt1058017", - "tt0092239", - "tt5657856", - "tt4799066", - "tt4400994", - "tt6288250", - "tt0088847", - "tt0211933", - "tt1638002", - "tt7388562", - "tt1588865", - "tt0101798", - "tt0989757", - "tt1592873", - "tt0020269", - "tt0290382", - "tt0337563", - "tt0473705", - "tt0974661", - "tt0221809", - "tt0870984", - "tt1282140", - "tt0311289", - "tt0120784", - "tt1530983", - "tt1704573", - "tt1285016", - "tt0095734", - "tt1465840", - "tt7689052", - "tt0804497", - "tt1191111", - "tt1690953", - "tt6480442", - "tt3469046", - "tt0116695", - "tt1323594", - "tt2381991", - "tt0889583", - "tt1735898", - "tt3332064", - "tt0887883", - "tt1637706", - "tt0822832", - "tt0494238", - "tt1320261", - "tt1013860", - "tt0763831", - "tt8466734", - "tt1010048", - "tt1389137", - "tt6288694", - "tt3447810", - "tt1727776", - "tt3344680", - "tt0362511", - "tt0383010", - "tt3760922", - "tt1131724", - "tt1389139", - "tt5770620", - "tt2504580", - "tt0054642", - "tt0189810", - "tt1091722", - "tt0873886", - "tt4901756", - "tt0383028", - "tt8231086", - "tt1522296", - "tt1570728", - "tt2058673", - "tt2024544", - "tt2788732", - "tt4266076", - "tt3522806", - "tt0960731", - "tt3553976", - "tt3638960", - "tt1261945", - "tt0455824", - "tt1343727", - "tt4550098", - "tt2278388", - "tt0443272", - "tt4799050", - "tt0120338", - "tt1082807", - "tt1895587", - "tt4846232", - "tt0490215", - "tt1014763", - "tt0790628", - "tt1798684", - "tt1206543", - "tt1821658", - "tt2194499", - "tt3488710", - "tt1024715", - "tt2141753", - "tt1000774", - "tt1959490", - "tt1615065", - "tt1397280", - "tt2446042", - "tt0089503", - "tt0964517", - "tt0936501", - "tt0401729", - "tt0790636", - "tt2334873", - "tt1620680", - "tt5226436", - "tt0090904", - "tt0063771", - "tt0060138", - "tt1041804", - "tt3746824", - "tt1211956", - "tt6135348", - "tt3811244", - "tt0808151", - "tt1979320", - "tt1473832", - "tt2199571", - "tt1440129", - "tt2296777", - "tt2361509", - "tt1706593", - "tt1707386", - "tt3062096", - "tt2582802", - "tt3691740", - "tt3874544", - "tt0918940", - "tt1798709", - "tt1016290", - "tt4196776", - "tt0834902", - "tt1693989", - "tt3631112", - "tt3292154", - "tt1772230", - "tt0120783", - "tt1880313", - "tt2011257", - "tt6574146", - "tt4063178", - "tt5360952", - "tt6864864", - "tt1857913", - "tt2948160", - "tt3647498", - "tt8525148", - "tt2316411", - "tt3410054", - "tt3797142", - "tt3105468", - "tt0328538", - "tt2528814", - "tt2938956", - "tt2097298", - "tt4023894", - "tt1726592", - "tt2025690", - "tt4385888", - "tt1560139", - "tt1666185", - "tt0120910", - "tt5143890", - "tt3705822", - "tt4287320", - "tt0102719", - "tt2072233", - "tt1800302", - "tt2649554", - "tt1355631", - "tt2638144", - "tt1472584", - "tt2241351", - "tt1661275", - "tt2597892", - "tt1528854", - "tt6959734", - "tt4572792", - "tt2872518", - "tt3901826", - "tt1619029", - "tt0471041", - "tt0787524", - "tt4411596", - "tt7583464", - "tt4302938", - "tt4501244", - "tt4565520", - "tt7026672", - "tt6164502", - "tt6450186", - "tt1446147", - "tt6678874", - "tt3014866", - "tt3717490", - "tt5884230", - "tt5816682", - "tt5719700", - "tt4986134", - "tt4682786", - "tt2763304", - "tt1293847", - "tt2671706", - "tt5001718", - "tt2034800", - "tt1730768", - "tt1212428", - "tt1469304", - "tt5301662", - "tt2720826", - "tt5962210", - "tt4540710", - "tt3881784", - "tt2776878", - "tt0404364", - "tt0424136", - "tt5825380", - "tt0080836", - "tt1726738", - "tt4481414", - "tt0156588", - "tt5175450", - "tt4565400", - "tt4348012", - "tt3963816", - "tt5689068", - "tt5231726", - "tt4382824", - "tt5442456", - "tt1493842", - "tt0820466", - "tt0271946", - "tt1864288", - "tt0087623", - "tt1895315", - "tt1933667", - "tt0083530", - "tt1545097", - "tt2331047", - "tt0105665", - "tt1637688", - "tt5065822", - "tt0080339", - "tt3722614", - "tt6138228", - "tt3319730", - "tt0075314", - "tt0107048", - "tt0070723", - "tt6264954", - "tt4429194", - "tt3569230", - "tt1535109", - "tt2884018", - "tt0083866", - "tt1935897", - "tt1504320", - "tt3721954", - "tt1229360", - "tt4622512", - "tt0113725", - "tt5666304", - "tt0072684", - "tt4978710", - "tt0887143", - "tt1254978", - "tt0006206", - "tt0408664", - "tt0112922", - "tt0068004", - "tt0060543", - "tt0057207", - "tt0015163", - "tt0464038", - "tt0058080", - "tt0255067", - "tt7829490", - "tt0092546", - "tt4276820", - "tt1152822", - "tt0123948", - "tt0115005", - "tt0165078", - "tt1300563", - "tt0129167", - "tt0756683", - "tt0099685", - "tt3774694", - "tt4698684", - "tt0110413", - "tt0071853", - "tt2378507", - "tt0097165", - "tt5973032", - "tt3949660", - "tt0790770", - "tt4054952", - "tt4795124", - "tt0141098", - "tt5247022", - "tt5635086", - "tt2080374", - "tt5752606", - "tt3464902", - "tt0107065", - "tt6788942", - "tt2547210", - "tt5168192", - "tt4178092", - "tt1307873", - "tt0944835", - "tt1307002", - "tt0790769", - "tt3322364", - "tt3462710", - "tt1910605", - "tt6193424", - "tt6303866", - "tt4651520", - "tt0475290", - "tt4624424", - "tt2404233", - "tt2980210", - "tt3714626", - "tt1988591", - "tt0110891", - "tt0478311", - "tt0452608", - "tt5974388", - "tt0111756", - "tt1833637", - "tt0100935", - "tt1013743", - "tt1500491", - "tt6857988", - "tt3072482", - "tt6318848", - "tt2057392", - "tt3502786", - "tt2120120", - "tt3463106", - "tt2239876", - "tt2361317", - "tt0799949", - "tt1878870", - "tt2674426", - "tt5805752", - "tt4218696", - "tt0491203", - "tt3401882", - "tt6018306", - "tt1935194", - "tt3922818", - "tt3531824", - "tt4776998", - "tt1648190", - "tt0110322", - "tt5622412", - "tt4680182", - "tt0054047", - "tt0285823", - "tt0805570", - "tt0120802", - "tt2005151", - "tt4572514", - "tt1748197", - "tt2062700", - "tt5390504", - "tt6359956", - "tt6133130", - "tt2568862", - "tt5592248", - "tt5716464", - "tt5322012", - "tt0780595", - "tt0100240", - "tt0243609", - "tt4701724", - "tt0077572", - "tt0098439", - "tt0063736", - "tt0265208", - "tt2636522", - "tt1731701", - "tt3721964", - "tt6737766", - "tt1792543", - "tt0409184", - "tt0243133", - "tt0200192", - "tt7263974", - "tt1645080", - "tt1806910", - "tt2316465", - "tt1638355", - "tt0467197", - "tt1800241", - "tt0243585", - "tt1617661", - "tt2562232", - "tt3470600", - "tt0075222", - "tt1964418", - "tt0359950", - "tt5749570", - "tt0099653", - "tt1231277", - "tt0100405", - "tt0130623", - "tt0164912", - "tt2196055", - "tt0094737", - "tt1407053", - "tt1935300", - "tt0120888", - "tt0091167", - "tt2872718", - "tt3170832", - "tt0113071", - "tt3615952", - "tt2872732", - "tt0075968", - "tt1392214", - "tt1270761", - "tt0066495", - "tt1425928", - "tt0131646", - "tt1512235", - "tt0098258", - "tt2297164", - "tt0227445", - "tt8452534", - "tt3344694", - "tt1787067", - "tt0053602", - "tt0101258", - "tt0417976", - "tt0091530", - "tt0203019", - "tt1037850", - "tt1598822", - "tt2390962", - "tt0486655", - "tt0485863", - "tt0107614", - "tt0076141", - "tt1823664", - "tt1748179", - "tt0033253", - "tt3327994", - "tt0111438", - "tt6599742", - "tt0069516", - "tt0041855", - "tt0025617", - "tt0026768", - "tt3896102", - "tt0042998", - "tt7243686", - "tt0109836", - "tt0033107", - "tt0299045", - "tt0032263", - "tt0033980", - "tt0032539", - "tt3700338", - "tt0031106", - "tt0021746", - "tt0122933", - "tt0031108", - "tt0031107", - "tt3212232", - "tt0349710", - "tt0212338", - "tt2249081", - "tt8448708", - "tt8452342", - "tt2191332", - "tt0970866", - "tt0029927", - "tt0780511", - "tt4700248", - "tt0040820", - "tt3677412", - "tt0985694", - "tt0360717", - "tt0120749", - "tt3238502", - "tt5641916", - "tt0116830", - "tt8383152", - "tt1886493", - "tt0119395", - "tt0976238", - "tt0470398", - "tt4656810", - "tt5275780", - "tt0947037", - "tt3625152", - "tt1202517", - "tt0476848", - "tt6336356", - "tt3346224", - "tt0366985", - "tt1816597", - "tt3829170", - "tt3622332", - "tt3609402", - "tt3058674", - "tt5639354", - "tt2493486", - "tt0065173", - "tt0066006", - "tt1137470", - "tt3847958", - "tt1663655", - "tt8370066", - "tt4776564", - "tt0076935", - "tt0925248", - "tt4616014", - "tt0305210", - "tt0084869", - "tt5822148", - "tt7479314", - "tt3783812", - "tt3658772", - "tt0043041", - "tt0122748", - "tt2118624", - "tt0034172", - "tt0075718", - "tt7883022", - "tt3903852", - "tt5039822", - "tt0067235", - "tt0159293", - "tt0123979", - "tt4382872", - "tt0077668", - "tt0088828", - "tt5370442", - "tt0082199", - "tt0200073", - "tt4872162", - "tt3832096", - "tt0114996", - "tt0448157", - "tt4530884", - "tt0112778", - "tt4862468", - "tt0027260", - "tt0074501", - "tt0031047", - "tt2237324", - "tt0066532", - "tt2332883", - "tt0049833", - "tt0360486", - "tt3850544", - "tt4642044", - "tt1214962", - "tt0095250", - "tt1502404", - "tt3286484", - "tt0356910", - "tt0093389", - "tt0118929", - "tt5049302", - "tt0119094", - "tt0187078", - "tt1410063", - "tt3381008", - "tt7392212", - "tt1864461", - "tt3027644", - "tt0120591", - "tt5904244", - "tt3838992", - "tt2048875", - "tt5639650", - "tt4444762", - "tt4969672", - "tt1190080", - "tt0112573", - "tt6964896", - "tt2537176", - "tt0077713", - "tt2918606", - "tt1996310", - "tt7451284", - "tt4935158", - "tt0080920", - "tt5842624", - "tt1544608", - "tt0034175", - "tt6802308", - "tt3563262", - "tt4687782", - "tt7203810", - "tt3113696", - "tt0051484", - "tt0019374", - "tt4578118", - "tt1242432", - "tt0027978", - "tt1935302", - "tt0194201", - "tt2669336", - "tt1515091", - "tt0085852", - "tt1470827", - "tt3450650", - "tt8184850", - "tt2555736", - "tt3172532", - "tt2637294", - "tt3850214", - "tt1869716", - "tt0120856", - "tt5052214", - "tt0161970", - "tt0082245", - "tt2870648", - "tt4104054", - "tt1579951", - "tt4874206", - "tt1594972", - "tt3471098", - "tt2582496", - "tt8152638", - "tt1437358", - "tt0945513", - "tt7672188", - "tt2624866", - "tt3142232", - "tt1531924", - "tt3882082", - "tt0105104", - "tt0770802", - "tt2717822", - "tt4824308", - "tt0450426", - "tt3717252", - "tt3089388", - "tt0101428", - "tt2978102", - "tt5836866", - "tt5471654", - "tt4957538", - "tt0080964", - "tt6456222", - "tt2822672", - "tt6892206", - "tt0386862", - "tt0044671", - "tt6786306", - "tt4451006", - "tt3174918", - "tt3321300", - "tt6015328", - "tt1524930", - "tt4347236", - "tt4818478", - "tt2393845", - "tt3064298", - "tt4477536", - "tt0903657", - "tt1534085", - "tt0287978", - "tt1959438", - "tt1243974", - "tt2334733", - "tt3675568", - "tt1735907", - "tt3294200", - "tt3832914", - "tt1178665", - "tt7048622", - "tt2140037", - "tt6293042", - "tt1641841", - "tt2510894", - "tt4594834", - "tt2752758", - "tt6003368", - "tt1371150", - "tt1002563", - "tt0060415", - "tt6951892", - "tt0443465", - "tt0896872", - "tt1506999", - "tt8342748", - "tt0116250", - "tt0028124", - "tt0062365", - "tt0056860", - "tt0030612", - "tt2625810", - "tt0028127", - "tt1762399", - "tt0343996", - "tt5831402", - "tt0119683", - "tt0377981", - "tt1488555", - "tt6183180", - "tt0028847", - "tt0030667", - "tt5532370", - "tt1464540", - "tt1592525", - "tt6799636", - "tt0068528", - "tt5547910", - "tt1727770", - "tt0120873", - "tt0119707", - "tt0120889", - "tt0129290", - "tt0120815", - "tt1219289", - "tt2084970", - "tt1153546", - "tt5117670", - "tt0102370", - "tt5059782", - "tt0383222", - "tt1568334", - "tt7642326", - "tt0099731", - "tt3919598", - "tt1093906", - "tt0098067", - "tt0101775", - "tt0492466", - "tt0354899", - "tt4986098", - "tt0099938", - "tt0099422", - "tt0090180", - "tt0110366", - "tt3741632", - "tt0071604", - "tt0476735", - "tt0113117", - "tt0112579", - "tt0107322", - "tt6086082", - "tt0104231", - "tt0102926", - "tt0112715", - "tt0082783", - "tt0107798", - "tt0265459", - "tt0140352", - "tt5710688", - "tt0090633", - "tt0057115", - "tt4652650", - "tt0084855", - "tt5085522", - "tt0134273", - "tt1171701", - "tt0133952", - "tt0488905", - "tt0368008", - "tt0218839", - "tt0075265", - "tt0314353", - "tt0825236", - "tt8271714", - "tt0376968", - "tt1599348", - "tt0151804", - "tt0183649", - "tt0266987", - "tt0080360", - "tt0462504", - "tt0078073", - "tt0118880", - "tt0200465", - "tt0159273", - "tt6987760", - "tt0087985", - "tt1924435", - "tt0062711", - "tt0084296", - "tt1178663", - "tt1728217", - "tt0377107", - "tt0172495", - "tt0117500", - "tt0048728", - "tt0256380", - "tt0112697", - "tt1987018", - "tt1582244", - "tt1724962", - "tt0151738", - "tt1462667", - "tt0095519", - "tt1646980", - "tt3477480", - "tt5283288", - "tt0397078", - "tt1124052", - "tt0160862", - "tt6752848", - "tt0414931", - "tt0074084", - "tt7086706", - "tt0109635", - "tt1382642", - "tt0470883", - "tt0090952", - "tt0113153", - "tt4799064", - "tt1587729", - "tt0098694", - "tt0370986", - "tt6427854", - "tt3121200", - "tt0261983", - "tt0065119", - "tt0096461", - "tt0499141", - "tt0112817", - "tt1345834", - "tt0882978", - "tt0165499", - "tt0437777", - "tt1232200", - "tt0095631", - "tt0073453", - "tt0114478", - "tt0190590", - "tt1694019", - "tt0055310", - "tt0068207", - "tt0076855", - "tt0047573", - "tt0066808", - "tt0076666", - "tt5294550", - "tt0110478", - "tt1290138", - "tt0341495", - "tt1716772", - "tt0078249", - "tt0353969", - "tt0101605", - "tt5154288", - "tt0437800", - "tt5796516", - "tt0104573", - "tt3553378", - "tt0485976", - "tt5934402", - "tt0101452", - "tt0110443", - "tt5856594", - "tt2261287", - "tt4537888", - "tt6013154", - "tt0089886", - "tt1412386", - "tt0104348", - "tt0059170", - "tt0106611", - "tt4779026", - "tt0124901", - "tt0064177", - "tt1330607", - "tt4731008", - "tt1310656", - "tt2364897", - "tt0113540", - "tt1611818", - "tt4669986", - "tt0062467", - "tt1590193", - "tt0073918", - "tt2382009", - "tt0482930", - "tt1686784", - "tt5073756", - "tt2076372", - "tt4444798", - "tt3278330", - "tt0101889", - "tt7448180", - "tt5645536", - "tt0995868", - "tt0101410", - "tt0498311", - "tt8295586", - "tt1937390", - "tt4351548", - "tt4552298", - "tt1055300", - "tt0100963", - "tt4257926", - "tt0053459", - "tt0097366", - "tt0090190", - "tt0015136", - "tt0996605", - "tt0097235", - "tt0110456", - "tt0062229", - "tt2017561", - "tt0035753", - "tt3326262", - "tt1813774", - "tt0088658", - "tt1259528", - "tt7311634", - "tt0057710", - "tt0041842", - "tt2133196", - "tt6149818", - "tt0047296", - "tt1185594", - "tt7133554", - "tt1336600", - "tt0105287", - "tt0096320", - "tt2056771", - "tt0114394", - "tt1330525", - "tt6143568", - "tt0386005", - "tt3066630", - "tt5625414", - "tt3543918", - "tt2169322", - "tt0112857", - "tt0058385", - "tt0095348", - "tt0082449", - "tt1681665", - "tt3165612", - "tt2608224", - "tt0080455", - "tt2925278", - "tt0434008", - "tt2332707", - "tt0073766", - "tt2544120", - "tt3395184", - "tt0092929", - "tt2142883", - "tt1216496", - "tt4702346", - "tt4192740", - "tt4003046", - "tt0369060", - "tt0374339", - "tt3235888", - "tt0102915", - "tt1424310", - "tt0338564", - "tt0089461", - "tt0098188", - "tt0107474", - "tt0084917", - "tt3672742", - "tt7128042", - "tt0446059", - "tt0094336", - "tt0452039", - "tt0081070", - "tt6170506", - "tt0088334", - "tt0054357", - "tt6595896", - "tt0106918", - "tt0448011", - "tt0120399", - "tt0165710", - "tt1730764", - "tt0089908", - "tt5503472", - "tt6315872", - "tt1567437", - "tt1764577", - "tt0110308", - "tt0114279", - "tt1865505", - "tt6900092", - "tt0102492", - "tt0401445", - "tt0090181", - "tt0076590", - "tt0119978", - "tt0209470", - "tt0068559", - "tt1441953", - "tt0070585", - "tt0089853", - "tt0199725", - "tt0060921", - "tt0338852", - "tt1809398", - "tt0268995", - "tt1082093", - "tt0050798", - "tt5629524", - "tt0062042", - "tt0038120", - "tt2515134", - "tt0365683", - "tt2655934", - "tt7860890", - "tt0245574", - "tt6101820", - "tt0024368", - "tt0056023", - "tt0853096", - "tt0091557", - "tt0882789", - "tt4050646", - "tt1138002", - "tt0057083", - "tt0109839", - "tt0944849", - "tt0046936", - "tt6573444", - "tt7130262", - "tt0212826", - "tt2937112", - "tt5707304", - "tt0878674", - "tt0089470", - "tt0087910", - "tt1055362", - "tt0027311", - "tt2058107", - "tt0038984", - "tt0068442", - "tt0103112", - "tt1492723", - "tt1951181", - "tt4494382", - "tt1714915", - "tt1976000", - "tt6089564", - "tt0081698", - "tt0090555", - "tt0104237", - "tt0080437", - "tt0164334", - "tt0092654", - "tt5598102", - "tt2636806", - "tt0050468", - "tt0376541", - "tt0120632", - "tt0120866", - "tt0104070", - "tt1391092", - "tt0082934", - "tt0070917", - "tt1450321", - "tt0115685", - "tt0057129", - "tt0107943", - "tt0117008", - "tt6516480", - "tt0080549", - "tt0044442", - "tt6083648", - "tt0230030", - "tt0091431", - "tt1300851", - "tt0144117", - "tt7521400", - "tt0099558", - "tt2005384", - "tt0108160", - "tt0080365", - "tt0084707", - "tt0059749", - "tt0086425", - "tt0061619", - "tt0089941", - "tt0101921", - "tt0110598", - "tt0074860", - "tt0099797", - "tt6977240", - "tt0088161", - "tt0110074", - "tt0113862", - "tt0246677", - "tt0070903", - "tt0070239", - "tt0059260", - "tt0097240", - "tt0419749", - "tt0092263", - "tt2084989", - "tt0120324", - "tt0119099", - "tt6135042", - "tt6333074", - "tt0046912", - "tt0119822", - "tt0309987", - "tt5860084", - "tt0051878", - "tt5678110", - "tt0118971", - "tt0120787", - "tt0166896", - "tt0471042", - "tt1636826", - "tt4560748", - "tt1645170", - "tt0092513", - "tt8111210", - "tt0970179", - "tt0093105", - "tt1448755", - "tt7106928", - "tt5935704", - "tt4953758", - "tt1966359", - "tt0268126", - "tt1397514", - "tt0367027", - "tt5565634", - "tt0098606", - "tt0071615", - "tt4205320", - "tt2073058", - "tt1226229", - "tt3454856", - "tt1031928", - "tt0120789", - "tt5304464", - "tt0055247", - "tt0443701", - "tt0117318", - "tt0099077", - "tt0120595", - "tt0114558", - "tt0096446", - "tt3889156", - "tt5841344", - "tt0080745", - "tt0878804", - "tt0081534", - "tt0475293", - "tt0780504", - "tt0103893", - "tt0120179", - "tt1981677", - "tt2848292", - "tt1334260", - "tt0096928", - "tt1549572", - "tt0810900", - "tt1041829", - "tt6125690", - "tt0119313", - "tt4058122", - "tt0086066", - "tt0301470", - "tt7211972", - "tt0313737", - "tt0477071", - "tt0259711", - "tt0117913", - "tt0375679", - "tt0985699", - "tt0962726", - "tt0072973", - "tt2051879", - "tt0104257", - "tt0765443", - "tt0477302", - "tt1401152", - "tt0099371", - "tt1210166", - "tt3005560", - "tt0086200", - "tt2007993", - "tt0317648", - "tt5294966", - "tt1336608", - "tt0942385", - "tt0070820", - "tt3845670", - "tt5757738", - "tt0104797", - "tt0296042", - "tt1014809", - "tt4765284", - "tt1291584", - "tt7963218", - "tt0446029", - "tt1454523", - "tt1433528", - "tt0478044", - "tt0244479", - "tt2106476", - "tt0066763", - "tt1522857", - "tt0494271", - "tt0061536", - "tt0039739", - "tt1291566", - "tt0975684", - "tt6814080", - "tt2948166", - "tt5162658", - "tt0063555", - "tt0117894", - "tt3230162", - "tt2531334", - "tt0106301", - "tt1031932", - "tt0815092", - "tt1598538", - "tt5711148", - "tt4551318", - "tt0090565", - "tt0338751", - "tt6153962", - "tt0073580", - "tt0050123", - "tt1422675", - "tt0892255", - "tt5751998", - "tt0285531", - "tt0879870", - "tt0364385", - "tt4915672", - "tt4687358", - "tt0374569", - "tt0367913", - "tt1133985", - "tt0106332", - "tt2334649", - "tt8095034", - "tt8140738", - "tt5208216", - "tt1632708", - "tt6684714", - "tt0083789", - "tt1560747", - "tt1714206", - "tt0081059", - "tt2268016", - "tt5146068", - "tt1866249", - "tt2800038", - "tt1663143", - "tt0453562", - "tt1413495", - "tt1517260", - "tt1204342", - "tt0480239", - "tt1985017", - "tt5739586", - "tt1234719", - "tt1840417", - "tt1862079", - "tt5782146", - "tt1521197", - "tt1702439", - "tt3568002", - "tt0770703", - "tt1586265", - "tt1601913", - "tt0089378", - "tt0075686", - "tt4591310", - "tt1758692", - "tt1717715", - "tt1582507", - "tt1407050", - "tt0145660", - "tt5461956", - "tt7017474", - "tt3338436", - "tt7877382", - "tt0328828", - "tt1605630", - "tt0295178", - "tt0163651", - "tt0141926", - "tt0060490", - "tt0256009", - "tt0267626", - "tt0053143", - "tt0276816", - "tt0100814", - "tt1053859", - "tt0118655", - "tt0368891", - "tt0089767", - "tt0482606", - "tt0116253", - "tt0181865", - "tt0105690", - "tt5208950", - "tt6440810", - "tt4451458", - "tt0259685", - "tt2825240", - "tt1057500", - "tt0086383", - "tt0327056", - "tt0101026", - "tt0186566", - "tt0114781", - "tt0068699", - "tt2358891", - "tt0099739", - "tt0091187", - "tt0079182", - "tt0058946", - "tt6772820", - "tt0244316", - "tt0095497", - "tt0067959", - "tt8049772", - "tt0061101", - "tt0120603", - "tt0838221", - "tt0042644", - "tt6791730", - "tt0265666", - "tt0038531", - "tt0102511", - "tt0088987", - "tt0089343", - "tt0037610", - "tt0822827", - "tt4468740", - "tt4536540", - "tt0483979", - "tt3813916", - "tt5540188", - "tt0055032", - "tt0257106", - "tt3130082", - "tt0175142", - "tt0464762", - "tt0117905", - "tt5700672", - "tt2690634", - "tt0795461", - "tt1727388", - "tt1758830", - "tt0362120", - "tt0059646", - "tt0073540", - "tt0306047", - "tt5700648", - "tt0082085", - "tt0057565", - "tt0128445", - "tt1440266", - "tt0050825", - "tt0107653", - "tt6572702", - "tt1859650", - "tt0080979", - "tt0056327", - "tt0052561", - "tt0090967", - "tt1045658", - "tt0929425", - "tt0080855", - "tt0056923", - "tt0104454", - "tt1990314", - "tt5291976", - "tt1389096", - "tt6425734", - "tt2234155", - "tt1659337", - "tt1931533", - "tt2070717", - "tt1538403", - "tt1931435", - "tt1893256", - "tt1817273", - "tt5997928", - "tt2392748", - "tt1559547", - "tt2076220", - "tt1272878", - "tt1649419", - "tt2101341", - "tt1540128", - "tt5629964", - "tt1321870", - "tt2229499", - "tt2005374", - "tt0076618", - "tt0318403", - "tt4847952", - "tt0083791", - "tt1446192", - "tt4513316", - "tt0120131", - "tt1648179", - "tt0240684", - "tt0082406", - "tt0401398", - "tt6413410", - "tt0441773", - "tt1001526", - "tt0166813", - "tt1302011", - "tt0448694", - "tt0481499", - "tt0892782", - "tt0116583", - "tt4292554", - "tt0146316", - "tt0371606", - "tt0279967", - "tt1326972", - "tt0119282", - "tt0230011", - "tt0389790", - "tt0910934", - "tt0053285", - "tt0275847", - "tt1220719", - "tt5001754", - "tt1386932", - "tt0114148", - "tt0457993", - "tt2204080", - "tt0425637", - "tt0328880", - "tt7235270", - "tt1109624", - "tt1641638", - "tt2140373", - "tt0344864", - "tt0048280", - "tt2495118", - "tt4768776", - "tt3402110", - "tt5910280", - "tt2333804", - "tt0067587", - "tt2177771", - "tt2042568", - "tt6220406", - "tt1571249", - "tt2910814", - "tt0060230", - "tt7994012", - "tt0068359", - "tt1091191", - "tt5606538", - "tt1824204", - "tt2239832", - "tt5207262", - "tt0416213", - "tt1086772", - "tt2193215", - "tt2980706", - "tt2582320", - "tt7342204", - "tt2557490", - "tt4992060", - "tt0036403", - "tt0115988", - "tt1179031", - "tt4068586", - "tt1335975", - "tt5706568", - "tt2463288", - "tt2297031", - "tt5287168", - "tt0325703", - "tt1929263", - "tt0307141", - "tt0068326", - "tt2223990", - "tt5669936", - "tt2291540", - "tt0086486", - "tt2980648", - "tt2203939", - "tt2402157", - "tt2582846", - "tt2209418", - "tt1355630", - "tt2318092", - "tt2125435", - "tt1686821", - "tt1980929", - "tt1277953", - "tt0101862", - "tt0101540", - "tt0351283", - "tt7250358", - "tt0061452", - "tt0479952", - "tt4730706", - "tt1321511", - "tt4975280", - "tt0114465", - "tt3772612", - "tt0397535", - "tt6304046", - "tt6741160", - "tt3011960", - "tt0120746", - "tt0021530", - "tt4173170", - "tt0066914", - "tt1726888", - "tt3721112", - "tt5039860", - "tt3469798", - "tt1134854", - "tt0114194", - "tt6397426", - "tt3909336", - "tt0091867", - "tt1961649", - "tt0333780", - "tt0386140", - "tt1600524", - "tt0418689", - "tt0380510", - "tt0089218", - "tt0117998", - "tt0983193", - "tt0099052", - "tt0088939", - "tt4866448", - "tt0104691", - "tt6442978", - "tt4577050", - "tt0498380", - "tt0112851", - "tt0113749", - "tt0469494", - "tt4995790", - "tt6263642", - "tt0274166", - "tt0110632", - "tt0051378", - "tt0120655", - "tt0118842", - "tt1077258", - "tt6333094", - "tt1007028", - "tt1320304", - "tt0305357", - "tt1646114", - "tt5452964", - "tt0013933", - "tt1634122", - "tt5189828", - "tt5534434", - "tt5811808", - "tt1937149", - "tt0109445", - "tt0106489", - "tt2819862", - "tt5462326", - "tt0107554", - "tt0087843", - "tt0272690", - "tt0217505", - "tt0203119", - "tt4900708", - "tt0208988", - "tt0103791", - "tt4217392", - "tt0307901", - "tt0221027", - "tt0399146", - "tt5342650", - "tt0102526", - "tt0108399", - "tt5698496", - "tt1230168", - "tt7131870", - "tt0117509", - "tt4733228", - "tt5159414", - "tt4901306", - "tt1649444", - "tt1245112", - "tt0104868", - "tt1649443", - "tt1038988", - "tt0116000", - "tt0203009", - "tt1486185", - "tt0120791", - "tt3501112", - "tt0074094", - "tt4072418", - "tt0191397", - "tt0120762", - "tt2866360", - "tt5450084", - "tt4291600", - "tt1781896", - "tt3567666", - "tt2090465", - "tt2446980", - "tt6273736", - "tt1352824", - "tt3540136", - "tt4694544", - "tt0395169", - "tt3554178", - "tt7056732", - "tt5722508", - "tt6599340", - "tt0128442", - "tt4016934", - "tt0120917", - "tt7245176", - "tt2174750", - "tt1403865", - "tt6878038", - "tt1753383", - "tt0049782", - "tt3579698", - "tt0033408", - "tt0817177", - "tt0066580", - "tt2252760", - "tt0112471", - "tt1542344", - "tt0024865", - "tt3415992", - "tt0082198", - "tt0054890", - "tt5834660", - "tt0362270", - "tt4283962", - "tt0046000", - "tt0035238", - "tt0053601", - "tt6083388", - "tt6772678", - "tt0094898", - "tt1024648", - "tt0133240", - "tt0109040", - "tt0115491", - "tt2082221", - "tt2172934", - "tt0071411", - "tt0050212", - "tt0056541", - "tt0044687", - "tt0120855", - "tt5866930", - "tt0112281", - "tt6777338", - "tt0061652", - "tt0203953", - "tt0383717", - "tt0042449", - "tt0059737", - "tt0040613", - "tt0063325", - "tt0062974", - "tt3859272", - "tt0025039", - "tt0051732", - "tt0059453", - "tt0264464", - "tt0486292", - "tt0035770", - "tt0059039", - "tt2191701", - "tt0479521", - "tt0061525", - "tt0083717", - "tt1754656", - "tt0054390", - "tt0037593", - "tt6203570", - "tt7525942", - "tt4842814", - "tt0052702", - "tt0049170", - "tt0910555", - "tt0374887", - "tt0059298", - "tt0042369", - "tt0101695", - "tt0039615", - "tt0085529", - "tt0319728", - "tt6039532", - "tt0054447", - "tt1621817", - "tt4273292", - "tt0381681", - "tt5082418", - "tt1095196", - "tt0071999", - "tt5084170", - "tt4518962", - "tt0071635", - "tt0039155", - "tt0119217", - "tt4005402", - "tt1375670", - "tt0054330", - "tt0046065", - "tt4465564", - "tt0063688", - "tt1499658", - "tt2381111", - "tt2869728", - "tt2170439", - "tt6553448", - "tt3174376", - "tt2965466", - "tt2653370", - "tt4527224", - "tt0243794", - "tt5066056", - "tt0064546", - "tt4805316", - "tt0049531", - "tt2989326", - "tt0089960", - "tt1390411", - "tt4438848", - "tt2347411", - "tt0166924", - "tt7272984", - "tt2567026", - "tt2865120", - "tt4412268", - "tt4303340", - "tt2567038", - "tt3553442", - "tt1712261", - "tt0106697", - "tt2180579", - "tt0062384", - "tt5912024", - "tt0114388", - "tt4383288", - "tt4587656", - "tt5560592", - "tt4536768", - "tt2387495", - "tt2253939", - "tt7924820", - "tt0106677", - "tt4729560", - "tt1212419", - "tt0075675", - "tt0162346", - "tt0097368", - "tt0099005", - "tt5126922", - "tt0083618", - "tt0405159", - "tt1663661", - "tt0092965", - "tt0104036", - "tt6237612", - "tt5633706", - "tt6511676", - "tt5999770", - "tt1205489", - "tt0058182", - "tt1018765", - "tt0078841", - "tt0274812", - "tt0087175", - "tt0093437", - "tt0067065", - "tt0122690", - "tt0061722", - "tt0119874", - "tt5023260", - "tt0810819", - "tt6836772", - "tt0368794", - "tt5226984", - "tt5133392", - "tt2101473", - "tt0120660", - "tt6835836", - "tt3715320", - "tt3481634", - "tt7944378", - "tt3548978", - "tt1691916", - "tt1340800", - "tt3321470", - "tt1212450", - "tt2083383", - "tt0119174", - "tt1028528", - "tt0479143", - "tt3419906", - "tt7914148", - "tt1083452", - "tt4486986", - "tt0107977", - "tt0116040", - "tt0329774", - "tt0108550", - "tt5342904", - "tt0084602", - "tt0080929", - "tt0295701", - "tt0079817", - "tt0088944", - "tt0367959", - "tt1616194", - "tt0060942", - "tt0100507", - "tt1852955", - "tt4364862", - "tt0445922", - "tt3037164", - "tt0840361", - "tt0810988", - "tt0071359", - "tt1869347", - "tt3963350", - "tt2852470", - "tt1821694", - "tt0816462", - "tt0882977", - "tt0859163", - "tt1700841", - "tt0094332", - "tt1245526", - "tt2287993", - "tt0482571", - "tt0816556", - "tt1060277", - "tt4837062", - "tt0120616", - "tt4827986", - "tt1691917", - "tt0209163", - "tt1974419", - "tt7934862", - "tt4721124", - "tt1670345", - "tt2823054", - "tt4600952", - "tt0293662", - "tt0072869", - "tt5980798", - "tt0846062", - "tt1659619", - "tt0419773", - "tt6333058", - "tt0800320", - "tt0063026", - "tt1907668", - "tt1253864", - "tt4467626", - "tt0376479", - "tt3416532", - "tt1637725", - "tt5446858", - "tt2975578", - "tt0034890", - "tt4094724", - "tt0338526", - "tt0023362", - "tt1462425", - "tt0107750", - "tt0379786", - "tt0056662", - "tt1195486", - "tt3313054", - "tt2184339", - "tt0207023", - "tt4781612", - "tt0313443", - "tt1588173", - "tt1489889", - "tt2033295", - "tt0454848", - "tt6213284", - "tt0145681", - "tt2935476", - "tt2140379", - "tt0121844", - "tt0249792", - "tt0002160", - "tt0002354", - "tt0277844", - "tt0121532", - "tt0277882", - "tt0277571", - "tt0041828", - "tt0121531", - "tt2401878", - "tt0266841", - "tt0427309", - "tt0277687", - "tt2566858", - "tt3045616", - "tt4164282", - "tt2463842", - "tt1189340", - "tt5716438", - "tt3960412", - "tt0243685", - "tt2126235", - "tt0112740", - "tt0965661", - "tt0453467", - "tt5034474", - "tt0174856", - "tt0963988", - "tt3100274", - "tt3652616", - "tt4778988", - "tt1090199", - "tt1096949", - "tt1095169", - "tt5638094", - "tt1093378", - "tt0080780", - "tt6217804", - "tt1096889", - "tt0118883", - "tt0097523", - "tt2582498", - "tt0109707", - "tt7262026", - "tt0477080", - "tt7266916", - "tt0085959", - "tt1343092", - "tt0443676", - "tt4669186", - "tt7807486", - "tt2937696", - "tt2692904", - "tt0091605", - "tt1772264", - "tt2674358", - "tt3229488", - "tt7879372", - "tt4977530", - "tt2238032", - "tt1626146", - "tt0076500", - "tt0082736", - "tt0247380", - "tt4470266", - "tt0057935", - "tt0049869", - "tt0063633", - "tt0076208", - "tt0049706", - "tt0102377", - "tt0108338", - "tt0111254", - "tt0035258", - "tt0031995", - "tt0030202", - "tt0071381", - "tt0054102", - "tt0027700", - "tt0027421", - "tt3505820", - "tt3735302", - "tt5742932", - "tt2153194", - "tt5279042", - "tt0064806", - "tt0068230", - "tt0117951", - "tt0031593", - "tt4468634", - "tt6168848", - "tt4367350", - "tt1653665", - "tt2375589", - "tt3687898", - "tt5570086", - "tt6497898", - "tt5842218", - "tt2547584", - "tt1741273", - "tt2910904", - "tt2304933", - "tt1412528", - "tt3316948", - "tt3095734", - "tt1995390", - "tt0171719", - "tt1526933", - "tt3685554", - "tt0139654", - "tt1673434", - "tt0085407", - "tt0059255", - "tt2852196", - "tt0366627", - "tt0408306", - "tt0134119", - "tt0081751", - "tt5153236", - "tt3797868", - "tt1164980", - "tt3758172", - "tt0113497", - "tt1737253", - "tt7670216", - "tt3387266", - "tt0086856", - "tt1292566", - "tt0100758", - "tt0988045", - "tt3921314", - "tt0382625", - "tt0245844", - "tt5722234", - "tt0071877", - "tt2347569", - "tt0096734", - "tt1790885", - "tt1763303", - "tt0107207", - "tt1037705", - "tt3266284", - "tt6204340", - "tt5091530", - "tt0120689", - "tt1291570", - "tt0098437", - "tt1327194", - "tt0319262", - "tt0052556", - "tt7660662", - "tt2215363", - "tt5925968", - "tt1129435", - "tt0097108", - "tt0058985", - "tt3304524", - "tt7833652", - "tt0055852", - "tt0057066", - "tt2788710", - "tt0113870", - "tt1823672", - "tt2126355", - "tt6998122", - "tt0050483", - "tt0054367", - "tt1245492", - "tt0079781", - "tt3327140", - "tt3717804", - "tt0063098", - "tt0054934", - "tt0816442", - "tt0038303", - "tt0048239", - "tt0064081", - "tt0127745", - "tt0435651", - "tt0116357", - "tt1600196", - "tt1872194", - "tt1791528", - "tt7479144", - "tt2436386", - "tt1972571", - "tt1204975", - "tt0247443", - "tt2312718", - "tt2334879", - "tt2883512", - "tt2387559", - "tt5702566", - "tt2369135", - "tt1921064", - "tt0429493", - "tt0409847", - "tt4877122", - "tt0472181", - "tt5719108", - "tt0443543", - "tt1172991", - "tt0898367", - "tt5862312", - "tt0454921", - "tt0814314", - "tt3110958", - "tt0317740", - "tt6484982", - "tt3335606", - "tt0066921", - "tt0046268", - "tt0120586", - "tt0093058", - "tt1032755", - "tt1543004", - "tt1724970", - "tt2249278", - "tt0110912", - "tt0105695", - "tt4845940", - "tt6353716", - "tt0208092", - "tt0120735", - "tt0368394", - "tt0081398", - "tt0114814", - "tt0105323", - "tt0407887", - "tt0209144", - "tt0414993", - "tt0113277", - "tt0399201", - "tt6957816", - "tt0371724", - "tt0278504", - "tt0337728", - "tt4726636", - "tt4000936", - "tt0162222", - "tt0822854", - "tt0238380", - "tt0094642", - "tt0887912", - "tt0106519", - "tt7692814", - "tt1680140", - "tt0115738", - "tt0443706", - "tt6054650", - "tt6260218", - "tt0311113", - "tt7136060", - "tt7396738", - "tt2357263", - "tt7643644", - "tt6719524", - "tt7642558", - "tt0056937", - "tt0077530", - "tt0970416", - "tt0452694", - "tt0124344", - "tt0115759", - "tt0244244", - "tt1650062", - "tt1386703", - "tt4248606", - "tt6150944", - "tt0102059", - "tt5613834", - "tt6151042", - "tt0137523", - "tt3758852", - "tt1439572", - "tt6243612", - "tt0822847", - "tt1731141", - "tt0433035", - "tt7546978", - "tt7587242", - "tt7421814", - "tt7281126", - "tt1527186", - "tt7661684", - "tt6294806", - "tt7621886", - "tt7754866", - "tt4397094", - "tt0063800", - "tt0448134", - "tt0035211", - "tt1385826", - "tt0288112", - "tt0044072", - "tt2361150", - "tt0379199", - "tt0120472", - "tt0045332", - "tt0050915", - "tt5931932", - "tt7445510", - "tt2094761", - "tt0119415", - "tt0059846", - "tt0497419", - "tt0406732", - "tt2435458", - "tt0079757", - "tt3725224", - "tt3291860", - "tt1718127", - "tt0053610", - "tt0067109", - "tt0938666", - "tt0062975", - "tt0093855", - "tt0090766", - "tt0050347", - "tt5073018", - "tt5254612", - "tt1284976", - "tt5503688", - "tt5431082", - "tt4141292", - "tt7518466", - "tt5863634", - "tt2112127", - "tt4933782", - "tt3654972", - "tt4181782", - "tt5485456", - "tt5239710", - "tt2024354", - "tt2936884", - "tt6284950", - "tt7624712", - "tt1356395", - "tt2294853", - "tt3707514", - "tt1659612", - "tt6041312", - "tt7264080", - "tt5971724", - "tt6645614", - "tt5156770", - "tt2306775", - "tt5690244", - "tt6148090", - "tt0115751", - "tt0056592", - "tt0097719", - "tt6132948", - "tt0362227", - "tt2884206", - "tt0081455", - "tt0168629", - "tt0119558", - "tt0064116", - "tt2072025", - "tt0097223", - "tt0088846", - "tt0090685", - "tt6764496", - "tt3101386", - "tt5231402", - "tt0272018", - "tt3296908", - "tt7312940", - "tt2153156", - "tt2153202", - "tt5265662", - "tt5974460", - "tt6057032", - "tt2153228", - "tt3505774", - "tt5588850", - "tt5905008", - "tt6791000", - "tt7440948", - "tt3202366", - "tt6496834", - "tt4734102", - "tt5327922", - "tt5294796", - "tt0246002", - "tt4919764", - "tt6634400", - "tt7143370", - "tt6634378", - "tt2153096", - "tt2140619", - "tt0075066", - "tt1051907", - "tt0054331", - "tt5074504", - "tt2153208", - "tt0059183", - "tt6635042", - "tt0056687", - "tt0072081", - "tt0063227", - "tt2369411", - "tt0055824", - "tt1286126", - "tt0066579", - "tt2331053", - "tt2614684", - "tt0057413", - "tt0078163", - "tt7647000", - "tt0077745", - "tt7588790", - "tt7030432", - "tt0074486", - "tt0052311", - "tt0100054", - "tt2306745", - "tt1341167", - "tt1434443", - "tt7647010", - "tt0381270", - "tt6622186", - "tt1668016", - "tt1247690", - "tt7030416", - "tt3892078", - "tt5652606", - "tt7385392", - "tt6678950", - "tt3794028", - "tt0221073", - "tt0460740", - "tt0079261", - "tt0124718", - "tt1723811", - "tt5813916", - "tt0118201", - "tt0091993", - "tt1592281", - "tt6567002", - "tt0050419", - "tt0146882", - "tt0281358", - "tt5737882", - "tt0063823", - "tt3765378", - "tt2580888", - "tt6055082", - "tt0993842", - "tt1375539", - "tt5369578", - "tt1686328", - "tt0120824", - "tt0098577", - "tt0086567", - "tt1126618", - "tt5845712", - "tt0107002", - "tt5705058", - "tt1032751", - "tt0455590", - "tt4685554", - "tt6381328", - "tt5891492", - "tt6142314", - "tt6433246", - "tt0808399", - "tt0465551", - "tt6334884", - "tt5298558", - "tt3530328", - "tt3950072", - "tt6852616", - "tt2262315", - "tt3549206", - "tt4607228", - "tt7258556", - "tt4244162", - "tt1667353", - "tt0119879", - "tt0082813", - "tt1563738", - "tt2221784", - "tt4685428", - "tt1728620", - "tt1606389", - "tt3459674", - "tt1454029", - "tt1568911", - "tt1826590", - "tt6233882", - "tt6104206", - "tt0105523", - "tt6605352", - "tt6647576", - "tt5692622", - "tt0482088", - "tt7038614", - "tt0405629", - "tt0035055", - "tt0034415", - "tt5806688", - "tt0313911", - "tt0035535", - "tt0049656", - "tt0410285", - "tt0084293", - "tt0053131", - "tt0050549", - "tt5971316", - "tt0037884", - "tt5678148", - "tt0057864", - "tt0202471", - "tt0120661", - "tt7427404", - "tt0066875", - "tt0078077", - "tt4826674", - "tt0073835", - "tt0010281", - "tt0399934", - "tt6398464", - "tt4677924", - "tt0010600", - "tt0009893", - "tt4420704", - "tt7126746", - "tt0050383", - "tt1708459", - "tt1980209", - "tt0072431", - "tt0337909", - "tt0076578", - "tt0097262", - "tt0870162", - "tt5129510", - "tt3036548", - "tt1738342", - "tt0064040", - "tt1549920", - "tt0091326", - "tt0055302", - "tt1904996", - "tt1781769", - "tt2294449", - "tt0118884", - "tt0047892", - "tt1830748", - "tt6156336", - "tt3454066", - "tt1814643", - "tt3425332", - "tt3405276", - "tt1830633", - "tt6105934", - "tt6874406", - "tt2931140", - "tt0367478", - "tt2088950", - "tt0067900", - "tt4728386", - "tt5078656", - "tt0054821", - "tt0103251", - "tt4287434", - "tt1975249", - "tt0110428", - "tt1130988", - "tt3910736", - "tt0298296", - "tt4733640", - "tt4994564", - "tt0097659", - "tt0844760", - "tt0119013", - "tt3687872", - "tt0095583", - "tt1667903", - "tt7201382", - "tt4865436", - "tt1714209", - "tt1334553", - "tt3619772", - "tt0094082", - "tt0181876", - "tt0382810", - "tt0087622", - "tt4777584", - "tt5025550", - "tt4741774", - "tt6545506", - "tt0422093", - "tt1478800", - "tt1825006", - "tt4685750", - "tt0910860", - "tt0476240", - "tt0295700", - "tt0120631", - "tt2346048", - "tt7071348", - "tt3800520", - "tt1587707", - "tt5321174", - "tt1264895", - "tt3210602", - "tt5578538", - "tt3612032", - "tt5748392", - "tt1111918", - "tt0117658", - "tt4356480", - "tt1545112", - "tt6322922", - "tt5729066", - "tt6762430", - "tt2444354", - "tt6254808", - "tt1785635", - "tt0104391", - "tt5357556", - "tt0889573", - "tt1361558", - "tt1910501", - "tt5991206", - "tt0070643", - "tt1945084", - "tt6536772", - "tt2186665", - "tt6536776", - "tt6536766", - "tt4865642", - "tt2048877", - "tt3674140", - "tt2960994", - "tt6599216", - "tt0845439", - "tt4596052", - "tt2100573", - "tt0305224", - "tt4768926", - "tt3971764", - "tt4076916", - "tt7204400", - "tt2610194", - "tt4291590", - "tt1140852", - "tt3077150", - "tt0436697", - "tt0418763", - "tt5938234", - "tt3699508", - "tt1258197", - "tt5258904", - "tt1890472", - "tt0102750", - "tt4943620", - "tt3823116", - "tt1017451", - "tt1578118", - "tt5317914", - "tt0350258", - "tt3179568", - "tt1655420", - "tt1935156", - "tt2167266", - "tt0094651", - "tt0384696", - "tt0088323", - "tt3663798", - "tt2016940", - "tt0283877", - "tt1217213", - "tt4720702", - "tt3995140", - "tt1753813", - "tt1216491", - "tt4557208", - "tt4301600", - "tt1972779", - "tt2398231", - "tt3105454", - "tt0106375", - "tt4511200", - "tt3849816", - "tt1361842", - "tt4126568", - "tt0052131", - "tt2967006", - "tt2458776", - "tt4695708", - "tt1791682", - "tt3014666", - "tt4417906", - "tt3713166", - "tt0085461", - "tt0049314", - "tt2378281", - "tt1709143", - "tt0050379", - "tt2756032", - "tt2714900", - "tt0049130", - "tt0049844", - "tt2262227", - "tt3726122", - "tt2870756", - "tt5878476", - "tt3395582", - "tt0058075", - "tt0058764", - "tt0059398", - "tt3804528", - "tt2017038", - "tt0056810", - "tt0056183", - "tt0050414", - "tt5278832", - "tt1720293", - "tt0103150", - "tt2263058", - "tt0052126", - "tt0120879", - "tt3483174", - "tt0082294", - "tt1674773", - "tt0054064", - "tt2366450", - "tt0279730", - "tt3889036", - "tt2637848", - "tt0095662", - "tt0238546", - "tt0060148", - "tt0061585", - "tt4738174", - "tt2545118", - "tt0068323", - "tt0061395", - "tt0070898", - "tt2032557", - "tt0091480", - "tt1531901", - "tt0874863", - "tt0091288", - "tt2130321", - "tt1602613", - "tt2070862", - "tt3696876", - "tt1595656", - "tt0054189", - "tt1772925", - "tt2381335", - "tt0265087", - "tt2103264", - "tt3124292", - "tt3983902", - "tt3738706", - "tt0065063", - "tt0138853", - "tt2925388", - "tt4054004", - "tt4764370", - "tt3205438", - "tt0058230", - "tt0095513", - "tt4073616", - "tt5487524", - "tt5262792", - "tt0094597", - "tt7467368", - "tt0443295", - "tt0077766", - "tt5024050", - "tt0097125", - "tt2385006", - "tt0114048", - "tt0482463", - "tt2967226", - "tt5078214", - "tt2721744", - "tt3863552", - "tt0426911", - "tt6349302", - "tt3214286", - "tt4074342", - "tt0118755", - "tt4789160", - "tt2361042", - "tt0079641", - "tt4515684", - "tt2661644", - "tt4703048", - "tt3896738", - "tt4044364", - "tt1712192", - "tt4382330", - "tt2315582", - "tt2122340", - "tt0098354", - "tt6255746", - "tt0082247", - "tt1422122", - "tt2317337", - "tt4459982", - "tt0085327", - "tt4504626", - "tt0100934", - "tt2027140", - "tt0385002", - "tt0066817", - "tt0093512", - "tt0095031", - "tt1028532", - "tt6680792", - "tt1698652", - "tt0118661", - "tt0023649", - "tt7070496", - "tt7321514", - "tt2704752", - "tt2492916", - "tt1787791", - "tt0070666", - "tt1329454", - "tt0091738", - "tt2449638", - "tt1337061", - "tt0337921", - "tt3354486", - "tt0284363", - "tt7315648", - "tt0396913", - "tt0328589", - "tt0196565", - "tt0416320", - "tt3225558", - "tt1785645", - "tt0385567", - "tt3118746", - "tt2417712", - "tt5003186", - "tt0080736", - "tt1785287", - "tt0117103", - "tt0057023", - "tt0057491", - "tt6003326", - "tt0102266", - "tt3954660", - "tt0059390", - "tt0063385", - "tt0381942", - "tt0064621", - "tt4334266", - "tt1978549", - "tt2937158", - "tt0087233", - "tt7321372", - "tt0063231", - "tt6153126", - "tt0486946", - "tt0427312", - "tt7162324", - "tt0050993", - "tt0418038", - "tt1318001", - "tt0198844", - "tt2343621", - "tt5427450", - "tt7281464", - "tt3905060", - "tt0377092", - "tt0028615", - "tt1740710", - "tt5239972", - "tt2428378", - "tt6857258", - "tt7281972", - "tt1302169", - "tt0063642", - "tt5564148", - "tt0055614", - "tt0239234", - "tt2125608", - "tt0244975", - "tt0056044", - "tt0072417", - "tt0054601", - "tt6618178", - "tt1727790", - "tt1838722", - "tt1216520", - "tt1388359", - "tt0109759", - "tt0209463", - "tt0079652", - "tt4464394", - "tt0162650", - "tt2380333", - "tt0069745", - "tt2574698", - "tt3651326", - "tt2172071", - "tt1807036", - "tt5563330", - "tt0054665", - "tt0195631", - "tt0071634", - "tt0061313", - "tt2569298", - "tt5116644", - "tt0045505", - "tt0073096", - "tt5874398", - "tt0061786", - "tt5794440", - "tt0042429", - "tt0038853", - "tt0085894", - "tt0075209", - "tt2416376", - "tt0097051", - "tt0031503", - "tt5974624", - "tt2069915", - "tt7174160", - "tt0063684", - "tt4935212", - "tt0063634", - "tt2367504", - "tt4937114", - "tt6076700", - "tt7242700", - "tt0059563", - "tt0046451", - "tt2140465", - "tt4914382", - "tt6628790", - "tt1077097", - "tt0138658", - "tt6196406", - "tt2633076", - "tt4405736", - "tt3089904", - "tt1467391", - "tt0054407", - "tt0087034", - "tt3263718", - "tt1891769", - "tt5468728", - "tt6581990", - "tt3530170", - "tt5240878", - "tt0912593", - "tt4775814", - "tt1745686", - "tt0048317", - "tt2565974", - "tt7020272", - "tt5599692", - "tt4927984", - "tt2325741", - "tt4528454", - "tt2618216", - "tt1640145", - "tt5419742", - "tt5278598", - "tt4357368", - "tt5078326", - "tt2905422", - "tt2963866", - "tt3601350", - "tt3263548", - "tt5680678", - "tt3449588", - "tt0082370", - "tt0048021", - "tt1339660", - "tt7174708", - "tt7065674", - "tt4900156", - "tt5647758", - "tt0225818", - "tt3828466", - "tt6691862", - "tt0075939", - "tt6104058", - "tt1426362", - "tt4911780", - "tt0100234", - "tt6095004", - "tt2082517", - "tt4705522", - "tt1292643", - "tt6156476", - "tt0120899", - "tt0075788", - "tt0108624", - "tt3766432", - "tt2586118", - "tt0055809", - "tt4908430", - "tt0056396", - "tt4362764", - "tt5328350", - "tt2953762", - "tt2538610", - "tt5639178", - "tt5921524", - "tt6568188", - "tt1280558", - "tt1423888", - "tt4392266", - "tt0055728", - "tt5106400", - "tt6327400", - "tt5231812", - "tt1260051", - "tt0093371", - "tt7121548", - "tt0053050", - "tt1289396", - "tt5456104", - "tt4849438", - "tt0047563", - "tt4954522", - "tt1278027", - "tt7073614", - "tt1730762", - "tt6782486", - "tt3630228", - "tt6914742", - "tt2848070", - "tt4364860", - "tt5304874", - "tt1937419", - "tt5859090", - "tt3918776", - "tt5212042", - "tt2652948", - "tt6652566", - "tt2107651", - "tt6338374", - "tt5949946", - "tt6131148", - "tt6017594", - "tt5283754", - "tt6948128", - "tt6273004", - "tt6970518", - "tt5096536", - "tt6386526", - "tt6436056", - "tt5902138", - "tt5458812", - "tt5364518", - "tt6839248", - "tt0079944", - "tt3346986", - "tt1702927", - "tt0070790", - "tt6027102", - "tt5733172", - "tt5140182", - "tt1701105", - "tt0050096", - "tt2474310", - "tt1205487", - "tt3953260", - "tt4880926", - "tt4923042", - "tt5278578", - "tt2386140", - "tt2889050", - "tt0046839", - "tt1702924", - "tt0089221", - "tt6392526", - "tt5747168", - "tt0049521", - "tt6575062", - "tt6089002", - "tt0028033", - "tt3019796", - "tt3544014", - "tt6966552", - "tt0044681", - "tt3319844", - "tt0046911", - "tt6426928", - "tt0069293", - "tt0065531", - "tt5633600", - "tt4622818", - "tt5326364", - "tt5945286", - "tt6822400", - "tt0069994", - "tt1618447", - "tt0050634", - "tt0085180", - "tt0079820", - "tt6981066", - "tt5449214", - "tt6680270", - "tt5614984", - "tt2679018", - "tt0096163", - "tt6917656", - "tt4483402", - "tt4217446", - "tt1224366", - "tt4022534", - "tt6973942", - "tt0475984", - "tt1503776", - "tt6794398", - "tt0126261", - "tt0276015", - "tt6145762", - "tt3243464", - "tt5126042", - "tt0104400", - "tt5134870", - "tt6279726", - "tt6722142", - "tt3032090", - "tt1024214", - "tt5946552", - "tt4215828", - "tt7042082", - "tt0285112", - "tt3430548", - "tt4935954", - "tt2414196", - "tt5029608", - "tt0119038", - "tt5864680", - "tt2091258", - "tt6990734", - "tt1106884", - "tt0096161", - "tt0119416", - "tt5328802", - "tt1826627", - "tt0834899", - "tt6521852", - "tt0205872", - "tt0087942", - "tt5001772", - "tt0113691", - "tt0102469", - "tt0105078", - "tt1105355", - "tt0050301", - "tt3529664", - "tt3198544", - "tt2364757", - "tt0047585", - "tt4042814", - "tt1144551", - "tt1986164", - "tt0079777", - "tt2446632", - "tt1258154", - "tt6906362", - "tt0113463", - "tt0113999", - "tt1910649", - "tt2776704", - "tt0107523", - "tt0059300", - "tt1027873", - "tt0104892", - "tt0050704", - "tt0324127", - "tt5811338", - "tt0098042", - "tt0790618", - "tt0491109", - "tt0069528", - "tt0490114", - "tt0099816", - "tt0118174", - "tt0117283", - "tt0114345", - "tt0816436", - "tt0068990", - "tt0180052", - "tt0297037", - "tt0177068", - "tt0070481", - "tt0084268", - "tt1715352", - "tt0066181", - "tt3132714", - "tt0490196", - "tt1274296", - "tt5074352", - "tt1503149", - "tt0460989", - "tt0398378", - "tt0056249", - "tt0118044", - "tt1161064", - "tt0338095", - "tt0417415", - "tt0803057", - "tt1869653", - "tt2702348", - "tt2004419", - "tt1621444", - "tt1153053", - "tt2357453", - "tt0168172", - "tt0156323", - "tt0480269", - "tt0349260", - "tt0109951", - "tt0108170", - "tt0120142", - "tt1833084", - "tt2032452", - "tt0116606", - "tt1319716", - "tt4125710", - "tt0066963", - "tt0119080", - "tt1743334", - "tt0128239", - "tt0112854", - "tt1467134", - "tt0482374", - "tt0080936", - "tt0144715", - "tt0106833", - "tt0052545", - "tt2368635", - "tt0119053", - "tt1842356", - "tt0176426", - "tt0387057", - "tt2280302", - "tt0375735", - "tt5370828", - "tt0103800", - "tt0078812", - "tt0104030", - "tt0115678", - "tt0094900", - "tt0171049", - "tt2357788", - "tt3244512", - "tt0420740", - "tt0790590", - "tt1834234", - "tt2444946", - "tt0168987", - "tt0834941", - "tt2991472", - "tt0269095", - "tt2461104", - "tt1520496", - "tt1247703", - "tt0250224", - "tt0052427", - "tt0101318", - "tt0086582", - "tt0106868", - "tt0061135", - "tt0155388", - "tt2788332", - "tt0318850", - "tt0092210", - "tt0463963", - "tt0117718", - "tt0091554", - "tt1144539", - "tt5761022", - "tt1886542", - "tt1817287", - "tt1531930", - "tt0066064", - "tt5133128", - "tt2370718", - "tt0429177", - "tt2034085", - "tt1462411", - "tt1580346", - "tt2201221", - "tt1618399", - "tt0069097", - "tt2625598", - "tt2075341", - "tt1727357", - "tt0452671", - "tt0795403", - "tt0106350", - "tt0064045", - "tt0112887", - "tt1754351", - "tt0064041", - "tt2234025", - "tt0105572", - "tt0099951", - "tt0172396", - "tt2245195", - "tt0075765", - "tt0119837", - "tt1468381", - "tt4518176", - "tt0446016", - "tt0110557", - "tt0120598", - "tt5606986", - "tt0816545", - "tt0341115", - "tt5377624", - "tt0110684", - "tt0418131", - "tt0057191", - "tt0783234", - "tt0367631", - "tt6806654", - "tt0047840", - "tt0410400", - "tt0109965", - "tt0804452", - "tt0101371", - "tt0367790", - "tt2805748", - "tt0058456", - "tt0119304", - "tt0120836", - "tt0276033", - "tt0257850", - "tt2848252", - "tt2217510", - "tt3407894", - "tt4079902", - "tt2974454", - "tt0203975", - "tt2081311", - "tt0443524", - "tt4266910", - "tt0072229", - "tt5747466", - "tt0117791", - "tt0094318", - "tt0204250", - "tt0478829", - "tt0082853", - "tt0484111", - "tt0105790", - "tt5186714", - "tt0108265", - "tt0093044", - "tt2072045", - "tt0108565", - "tt0092834", - "tt1753666", - "tt0092944", - "tt2697586", - "tt2363870", - "tt2124926", - "tt3228302", - "tt1571565", - "tt0220100", - "tt0301684", - "tt3842724", - "tt1404702", - "tt1822325", - "tt1536458", - "tt1766085", - "tt0112302", - "tt0437325", - "tt0091706", - "tt3875548", - "tt0095496", - "tt3566812", - "tt1722560", - "tt0245046", - "tt2608030", - "tt1507351", - "tt0104550", - "tt0118064", - "tt0117991", - "tt0050240", - "tt0034241", - "tt1500117", - "tt4660736", - "tt0100813", - "tt0161743", - "tt1479534", - "tt1723659", - "tt3528498", - "tt0441869", - "tt1746565", - "tt5730882", - "tt0239612", - "tt2193450", - "tt0247586", - "tt0102882", - "tt1318056", - "tt1454700", - "tt1958088", - "tt2246961", - "tt2189858", - "tt6217830", - "tt1584747", - "tt0080448", - "tt0847221", - "tt2639464", - "tt0964529", - "tt0290657", - "tt5937962", - "tt2706570", - "tt0071855", - "tt0080768", - "tt0059168", - "tt0081107", - "tt2756644", - "tt0060400", - "tt4246894", - "tt4082068", - "tt3037028", - "tt0215704", - "tt0084582", - "tt0092610", - "tt0352526", - "tt0098350", - "tt5909128", - "tt2515656", - "tt1756615", - "tt1699223", - "tt2773382", - "tt0063551", - "tt5813250", - "tt4936450", - "tt1242881", - "tt0411323", - "tt4216908", - "tt5081606", - "tt3123116", - "tt6218048", - "tt6264596", - "tt0222020", - "tt6034048", - "tt5264056", - "tt4434676", - "tt0090993", - "tt4077768", - "tt2036388", - "tt0009915", - "tt5227794", - "tt3954924", - "tt6878486", - "tt6877360", - "tt5211742", - "tt3564794", - "tt3374966", - "tt5643380", - "tt6509214", - "tt5186236", - "tt3341582", - "tt0119361", - "tt5546192", - "tt0035977", - "tt5141060", - "tt6194774", - "tt0071206", - "tt4026562", - "tt0214373", - "tt4305148", - "tt2076959", - "tt6843596", - "tt0276886", - "tt4779036", - "tt4000670", - "tt2094034", - "tt3513180", - "tt3818022", - "tt0073198", - "tt3759568", - "tt2670524", - "tt4120176", - "tt0051005", - "tt4466550", - "tt5918926", - "tt2234428", - "tt0065999", - "tt0047429", - "tt2075192", - "tt6736290", - "tt4835086", - "tt0053931", - "tt6634930", - "tt0036301", - "tt0069393", - "tt0038687", - "tt0487171", - "tt0079219", - "tt5909140", - "tt0035565", - "tt4286432", - "tt4205560", - "tt0067648", - "tt2526898", - "tt0421045", - "tt3718904", - "tt3790012", - "tt4643580", - "tt0867270", - "tt2555652", - "tt3783422", - "tt3398436", - "tt0048791", - "tt5003654", - "tt5840392", - "tt2401099", - "tt5525782", - "tt0069404", - "tt0240736", - "tt6436202", - "tt1510988", - "tt3418972", - "tt1300579", - "tt5307698", - "tt5140244", - "tt6814052", - "tt3283708", - "tt3907394", - "tt3529052", - "tt4952536", - "tt3560166", - "tt3355152", - "tt2847238", - "tt1911553", - "tt5206098", - "tt2184335", - "tt2852394", - "tt3427008", - "tt4119420", - "tt5792762", - "tt1413496", - "tt0040552", - "tt0120018", - "tt0045470", - "tt0228711", - "tt5674842", - "tt0052199", - "tt4497142", - "tt2554856", - "tt5263116", - "tt0109731", - "tt5039028", - "tt6793206", - "tt5688480", - "tt2798456", - "tt3527166", - "tt6793140", - "tt3469674", - "tt5876322", - "tt0361596", - "tt3597510", - "tt4699388", - "tt0066265", - "tt0140751", - "tt3966942", - "tt4004366", - "tt4731148", - "tt4210112", - "tt6410016", - "tt3175888", - "tt0066227", - "tt0366905", - "tt0067699", - "tt1628777", - "tt5525310", - "tt5263876", - "tt1434937", - "tt0226204", - "tt1860226", - "tt4659056", - "tt0181365", - "tt2339351", - "tt5069074", - "tt2317002", - "tt5476094", - "tt4919232", - "tt1989435", - "tt3078932", - "tt1877740", - "tt2008627", - "tt6720442", - "tt0869994", - "tt0050535", - "tt6545154", - "tt0096863", - "tt5461606", - "tt5923040", - "tt6285552", - "tt2820008", - "tt0051544", - "tt1473063", - "tt1653911", - "tt6212346", - "tt5034444", - "tt3413044", - "tt4162992", - "tt0389557", - "tt1545759", - "tt0337566", - "tt4818662", - "tt2953528", - "tt6405354", - "tt0815490", - "tt0070568", - "tt0043409", - "tt4456270", - "tt4422164", - "tt1322333", - "tt0944834", - "tt4156152", - "tt0350124", - "tt0379976", - "tt3849370", - "tt6068960", - "tt0236388", - "tt0070506", - "tt0450188", - "tt4144332", - "tt1135989", - "tt5834036", - "tt4130944", - "tt2124782", - "tt2622390", - "tt0060410", - "tt2217861", - "tt5912052", - "tt0031737", - "tt1723108", - "tt5059126", - "tt2149798", - "tt4138004", - "tt5295802", - "tt4834762", - "tt5227140", - "tt2719094", - "tt3440132", - "tt4505208", - "tt3254656", - "tt6449274", - "tt0168192", - "tt0000417", - "tt1978447", - "tt0120380", - "tt3330774", - "tt0350811", - "tt0196871", - "tt0129871", - "tt6314842", - "tt2316801", - "tt0119784", - "tt3974202", - "tt5198868", - "tt4920094", - "tt6550440", - "tt3221544", - "tt2442526", - "tt0070106", - "tt5302150", - "tt4331970", - "tt5232490", - "tt3196692", - "tt5591458", - "tt2369497", - "tt1233328", - "tt0077613", - "tt0091847", - "tt1124001", - "tt5119048", - "tt3019620", - "tt1227381", - "tt3716530", - "tt0433588", - "tt1843283", - "tt4283358", - "tt1390415", - "tt6212586", - "tt0493361", - "tt0461688", - "tt0049490", - "tt3430416", - "tt3792960", - "tt3006756", - "tt4235476", - "tt0845980", - "tt0039840", - "tt0059798", - "tt4328642", - "tt3318956", - "tt4460176", - "tt3215842", - "tt5270832", - "tt3876702", - "tt1726861", - "tt3043252", - "tt2273673", - "tt5850440", - "tt0042235", - "tt0050112", - "tt4590930", - "tt2711898", - "tt2180335", - "tt2568074", - "tt3358998", - "tt4239726", - "tt0478197", - "tt1510989", - "tt3671676", - "tt0121804", - "tt2077908", - "tt5446610", - "tt2499022", - "tt6392454", - "tt0146247", - "tt0120711", - "tt0146455", - "tt0404254", - "tt1459012", - "tt0871427", - "tt0258100", - "tt0106336", - "tt0280453", - "tt0804539", - "tt0256276", - "tt0191173", - "tt1814614", - "tt3108318", - "tt1091994", - "tt1957913", - "tt0191996", - "tt0227173", - "tt2339647", - "tt1754513", - "tt4609262", - "tt1725969", - "tt2461726", - "tt1570970", - "tt1733147", - "tt2631862", - "tt6439776", - "tt1871241", - "tt3808298", - "tt3102356", - "tt5346890", - "tt0420835", - "tt1270090", - "tt2139725", - "tt0053716", - "tt2399752", - "tt1734580", - "tt2932498", - "tt4228810", - "tt2837296", - "tt0330099", - "tt2321195", - "tt0304356", - "tt1754733", - "tt0202402", - "tt0203929", - "tt0105811", - "tt0117927", - "tt0117924", - "tt1675313", - "tt2214864", - "tt0078736", - "tt0340380", - "tt0284330", - "tt3366000", - "tt0066844", - "tt0102095", - "tt0864959", - "tt1299366", - "tt1213864", - "tt6486190", - "tt2478442", - "tt0836662", - "tt0091613", - "tt0286077", - "tt0457270", - "tt6076802", - "tt0997278", - "tt0085446", - "tt4719158", - "tt2704816", - "tt0099073", - "tt6393222", - "tt5968910", - "tt0144546", - "tt0068920", - "tt3032060", - "tt1208711", - "tt0949379", - "tt5278466", - "tt4718770", - "tt4917622", - "tt0790775", - "tt5022872", - "tt4935084", - "tt4645368", - "tt2672052", - "tt2296747", - "tt3703836", - "tt0383139", - "tt0043301", - "tt0075343", - "tt2245119", - "tt2088748", - "tt5936692", - "tt4494956", - "tt1872102", - "tt1872101", - "tt4746484", - "tt4630550", - "tt1826610", - "tt2262345", - "tt4741170", - "tt0112379", - "tt3531516", - "tt5038358", - "tt1267319", - "tt5024728", - "tt4338434", - "tt2091893", - "tt0086330", - "tt4266370", - "tt0206420", - "tt6484426", - "tt6435824", - "tt5219814", - "tt4882964", - "tt0088392", - "tt0476031", - "tt0119718", - "tt1863192", - "tt0083824", - "tt0420901", - "tt0799954", - "tt5104332", - "tt2193151", - "tt2484120", - "tt4877264", - "tt3946792", - "tt5128712", - "tt0310149", - "tt0092591", - "tt0162866", - "tt0192035", - "tt1713440", - "tt5333110", - "tt1764240", - "tt0287969", - "tt3808342", - "tt5248042", - "tt0113247", - "tt4400174", - "tt1715876", - "tt4193400", - "tt4093410", - "tt5590890", - "tt4663992", - "tt0202832", - "tt0086420", - "tt4156998", - "tt4009232", - "tt0045327", - "tt2632340", - "tt2833580", - "tt3664008", - "tt3357772", - "tt5471480", - "tt6342940", - "tt4795692", - "tt0350194", - "tt3830162", - "tt5824900", - "tt5310410", - "tt0280170", - "tt1068962", - "tt2294917", - "tt4175148", - "tt6393248", - "tt5133308", - "tt4327752", - "tt0123633", - "tt4875456", - "tt0244203", - "tt5779056", - "tt3146360", - "tt0064699", - "tt3080844", - "tt1594503", - "tt0960750", - "tt1879030", - "tt4048168", - "tt0411272", - "tt6323506", - "tt1259014", - "tt3654918", - "tt5544700", - "tt3889642", - "tt0104495", - "tt1854535", - "tt4648986", - "tt4857514", - "tt5934788", - "tt5217256", - "tt1823126", - "tt0061765", - "tt0100263", - "tt5214744", - "tt1832382", - "tt4426656", - "tt1798141", - "tt2302701", - "tt6149120", - "tt4996022", - "tt3326350", - "tt2112129", - "tt4308714", - "tt5278592", - "tt5042426", - "tt4823524", - "tt4585660", - "tt0800058", - "tt2281069", - "tt2668800", - "tt3922320", - "tt5734138", - "tt0993789", - "tt4334482", - "tt2991368", - "tt5249484", - "tt0057543", - "tt2370138", - "tt0047674", - "tt1783780", - "tt3100904", - "tt1642248", - "tt3022458", - "tt6212344", - "tt4837232", - "tt2011971", - "tt1964624", - "tt5096628", - "tt3673000", - "tt4482858", - "tt4838334", - "tt3920572", - "tt4976984", - "tt3399112", - "tt2393917", - "tt1794943", - "tt5774012", - "tt1836869", - "tt6174822", - "tt5127398", - "tt4132250", - "tt3838728", - "tt2932530", - "tt5458792", - "tt1714827", - "tt4558256", - "tt2665200", - "tt1821362", - "tt0137439", - "tt0097106", - "tt5917118", - "tt0077469", - "tt6167646", - "tt5254640", - "tt4428762", - "tt3954294", - "tt5815434", - "tt0038668", - "tt2046090", - "tt4471630", - "tt5805350", - "tt0275947", - "tt5344230", - "tt4110400", - "tt2400311", - "tt3210984", - "tt2327319", - "tt1697075", - "tt2938230", - "tt6104992", - "tt6026094", - "tt5989054", - "tt2527190", - "tt5252624", - "tt2118737", - "tt5735410", - "tt2882854", - "tt4948452", - "tt0181530", - "tt0286038", - "tt3247286", - "tt2070776", - "tt4459770", - "tt2979094", - "tt1283479", - "tt4426182", - "tt1019938", - "tt0004670", - "tt0009611", - "tt0004311", - "tt0010747", - "tt0004693", - "tt1876454", - "tt4730986", - "tt0012304", - "tt0115928", - "tt0013486", - "tt0006497", - "tt0004280", - "tt0004288", - "tt0004282", - "tt0004189", - "tt1890426", - "tt0003805", - "tt0004277", - "tt0003863", - "tt0004101", - "tt0009018", - "tt4809458", - "tt4836736", - "tt4001526", - "tt0056291", - "tt0003679", - "tt6233688", - "tt0100303", - "tt0010057", - "tt0003758", - "tt5086438", - "tt2712884", - "tt2869762", - "tt5278868", - "tt4231686", - "tt0124307", - "tt6208524", - "tt0211259", - "tt6107852", - "tt0015361", - "tt1856057", - "tt4161074", - "tt4063314", - "tt3949216", - "tt1863201", - "tt1130993", - "tt5505532", - "tt4356466", - "tt4229948", - "tt3882000", - "tt0335345", - "tt1192629", - "tt1486608", - "tt2168882", - "tt4328666", - "tt0246135", - "tt4734082", - "tt5639464", - "tt2292820", - "tt0075683", - "tt6136300", - "tt2543698", - "tt3498590", - "tt0284691", - "tt3443788", - "tt0015064", - "tt0114571", - "tt4439852", - "tt1680136", - "tt2866676", - "tt0414923", - "tt0012651", - "tt1179025", - "tt0370904", - "tt0066192", - "tt5673884", - "tt0121500", - "tt4838440", - "tt0189070", - "tt0467671", - "tt3809478", - "tt1509271", - "tt0795554", - "tt6186362", - "tt4551882", - "tt0087797", - "tt0112366", - "tt5375206", - "tt3547682", - "tt0065989", - "tt1261051", - "tt6156350", - "tt0113425", - "tt5540898", - "tt3003470", - "tt0119014", - "tt2239126", - "tt6166250", - "tt4604496", - "tt4686692", - "tt3915966", - "tt3433632", - "tt3268030", - "tt0068924", - "tt4377942", - "tt3790720", - "tt4483460", - "tt5275866", - "tt4644836", - "tt5931726", - "tt4190906", - "tt0056663", - "tt5599206", - "tt1276419", - "tt5076518", - "tt4444446", - "tt0836700", - "tt0046022", - "tt2053425", - "tt0138464", - "tt2069948", - "tt5167942", - "tt2931148", - "tt5007908", - "tt3877718", - "tt3865614", - "tt0084357", - "tt3185602", - "tt2716802", - "tt0075163", - "tt1779076", - "tt3480110", - "tt1531049", - "tt4883758", - "tt1709694", - "tt3453648", - "tt4467714", - "tt3462852", - "tt3402078", - "tt2953182", - "tt4717746", - "tt0312633", - "tt4024210", - "tt5272042", - "tt0108500", - "tt5900592", - "tt0075322", - "tt0120882", - "tt2994832", - "tt0110604", - "tt0470869", - "tt0274789", - "tt0301215", - "tt0058203", - "tt0150251", - "tt0893401", - "tt0286214", - "tt0085912", - "tt0111793", - "tt5952332", - "tt2806390", - "tt3631282", - "tt4396074", - "tt4331718", - "tt2072137", - "tt0122159", - "tt0072241", - "tt2842732", - "tt3096858", - "tt4527254", - "tt3569978", - "tt0960067", - "tt1522203", - "tt1849818", - "tt2308583", - "tt3063072", - "tt3282308", - "tt0879843", - "tt1600419", - "tt0060305", - "tt0065093", - "tt1853548", - "tt0008377", - "tt0007761", - "tt5563932", - "tt4377952", - "tt0010221", - "tt0023563", - "tt0008975", - "tt3891218", - "tt0091534", - "tt0009123", - "tt0309926", - "tt4921846", - "tt0008112", - "tt0093986", - "tt0009899", - "tt3699676", - "tt0092822", - "tt0002423", - "tt5851572", - "tt3443616", - "tt5280984", - "tt2698966", - "tt4370784", - "tt2942620", - "tt4316846", - "tt2621784", - "tt2921338", - "tt6047684", - "tt5051356", - "tt4460598", - "tt3474994", - "tt3791302", - "tt3811986", - "tt0095467", - "tt3863484", - "tt4794512", - "tt0095468", - "tt1442223", - "tt0034210", - "tt0033133", - "tt5889946", - "tt0020442", - "tt0481552", - "tt5116314", - "tt0407776", - "tt3122842", - "tt0033091", - "tt0018742", - "tt3141912", - "tt0034180", - "tt0032598", - "tt0031734", - "tt0031667", - "tt0031793", - "tt5233106", - "tt0032889", - "tt0230238", - "tt0815122", - "tt0023955", - "tt0104882", - "tt3877674", - "tt3951730", - "tt3764122", - "tt1954931", - "tt4358230", - "tt3505682", - "tt0358456", - "tt3904770", - "tt0147060", - "tt0034540", - "tt0152580", - "tt0847474", - "tt4428814", - "tt1853620", - "tt2323264", - "tt0147143", - "tt0034925", - "tt0142349", - "tt0007819", - "tt3215168", - "tt0096412", - "tt0008874", - "tt4085084", - "tt0009466", - "tt0008523", - "tt4269194", - "tt0010155", - "tt0009389", - "tt0096056", - "tt0218611", - "tt0054343", - "tt3293250", - "tt0116275", - "tt0249973", - "tt0820986", - "tt0181275", - "tt0102213", - "tt0088961", - "tt1440309", - "tt0004194", - "tt1683051", - "tt0059831", - "tt0038855", - "tt3444616", - "tt5229082", - "tt0381842", - "tt0207801", - "tt0351920", - "tt0351638", - "tt0005677", - "tt0037030", - "tt0005678", - "tt0263830", - "tt0389292", - "tt0034996", - "tt0033989", - "tt0005315", - "tt0117553", - "tt0004212", - "tt0042183", - "tt1440150", - "tt1440188", - "tt0277755", - "tt0005309", - "tt0233242", - "tt0035663", - "tt0002851", - "tt0005676", - "tt3478962", - "tt4878890", - "tt4953610", - "tt2818178", - "tt2741122", - "tt5223500", - "tt3139764", - "tt2108517", - "tt3760332", - "tt3093618", - "tt3533254", - "tt2220034", - "tt0081246", - "tt4685148", - "tt0076168", - "tt3187094", - "tt0808148", - "tt1681368", - "tt0069851", - "tt0045162", - "tt5103832", - "tt3828796", - "tt1086315", - "tt4844522", - "tt1090282", - "tt1086314", - "tt4440488", - "tt2169414", - "tt1090178", - "tt4957446", - "tt0453382", - "tt2847520", - "tt0027489", - "tt0493151", - "tt0110434", - "tt5959320", - "tt0439719", - "tt0022877", - "tt0487264", - "tt0022125", - "tt0006296", - "tt0006262", - "tt0067580", - "tt1691323", - "tt0939636", - "tt1672621", - "tt0818120", - "tt0363728", - "tt0153752", - "tt0032164", - "tt0066019", - "tt0042872", - "tt0927629", - "tt0058555", - "tt0005316", - "tt0039383", - "tt0047114", - "tt0110010", - "tt0006145", - "tt0005310", - "tt3616894", - "tt4073868", - "tt1235552", - "tt0005313", - "tt4810828", - "tt4937156", - "tt0114753", - "tt0045719", - "tt0042906", - "tt0005312", - "tt2932828", - "tt1717690", - "tt1065086", - "tt2918608", - "tt0115725", - "tt4960242", - "tt0101765", - "tt0054621", - "tt5631422", - "tt1334570", - "tt0775091", - "tt5179576", - "tt5734214", - "tt5655056", - "tt0118756", - "tt4934886", - "tt4741714", - "tt1337642", - "tt3246158", - "tt4935418", - "tt0249868", - "tt0926762", - "tt0120373", - "tt0375160", - "tt1670392", - "tt5917230", - "tt2398159", - "tt0068288", - "tt0087313", - "tt0047821", - "tt5037982", - "tt2277834", - "tt3606698", - "tt3477620", - "tt2018047", - "tt2662764", - "tt3447228", - "tt5541180", - "tt4569240", - "tt4819738", - "tt3986932", - "tt2401715", - "tt2385227", - "tt3136752", - "tt3758564", - "tt2171875", - "tt3566788", - "tt1603900", - "tt0073317", - "tt2343140", - "tt1773067", - "tt2901690", - "tt2247692", - "tt0057336", - "tt3305316", - "tt0090886", - "tt4428788", - "tt3913206", - "tt0048434", - "tt3757218", - "tt4041382", - "tt4183170", - "tt2083972", - "tt5832008", - "tt0205047", - "tt5673202", - "tt1972752", - "tt5773112", - "tt5899100", - "tt5672502", - "tt4122254", - "tt0124707", - "tt0057171", - "tt3583370", - "tt4426130", - "tt2643164", - "tt0188195", - "tt3715122", - "tt3468612", - "tt1294645", - "tt2061682", - "tt3728746", - "tt4421920", - "tt3667792", - "tt3702720", - "tt0055580", - "tt5660556", - "tt4082596", - "tt3018528", - "tt2175535", - "tt1456606", - "tt2625968", - "tt5069090", - "tt3682546", - "tt4048050", - "tt1000716", - "tt1764614", - "tt3422078", - "tt3699572", - "tt3748048", - "tt3646344", - "tt0108327", - "tt0109665", - "tt3605304", - "tt1783422", - "tt0188694", - "tt0104786", - "tt3597448", - "tt0254334", - "tt3007240", - "tt4539136", - "tt0342735", - "tt1239449", - "tt0950780", - "tt1695405", - "tt4428800", - "tt2278871", - "tt0252684", - "tt3249414", - "tt5812306", - "tt3753432", - "tt5828074", - "tt1638979", - "tt0081658", - "tt4709218", - "tt0118849", - "tt0033357", - "tt4400360", - "tt3129892", - "tt0056303", - "tt3451720", - "tt3771510", - "tt0068179", - "tt4238156", - "tt0923956", - "tt2609998", - "tt2073129", - "tt5145840", - "tt0105592", - "tt1474816", - "tt2016153", - "tt1877892", - "tt4292318", - "tt3237128", - "tt3596952", - "tt2496758", - "tt0055191", - "tt3737996", - "tt3512634", - "tt0040214", - "tt0397113", - "tt3317728", - "tt2438818", - "tt4111044", - "tt3173518", - "tt0272606", - "tt0282521", - "tt0074335", - "tt2390630", - "tt0063673", - "tt0092222", - "tt5259692", - "tt1844735", - "tt2974190", - "tt3584390", - "tt2395312", - "tt5668196", - "tt4886308", - "tt4287852", - "tt3000950", - "tt0995850", - "tt0808232", - "tt4074652", - "tt4154728", - "tt5377604", - "tt2145909", - "tt4379180", - "tt0861731", - "tt2781406", - "tt0465589", - "tt0400063", - "tt1436342", - "tt0037330", - "tt0116441", - "tt3800010", - "tt4120210", - "tt3014600", - "tt4085944", - "tt0133848", - "tt4881016", - "tt0095477", - "tt3544218", - "tt3362064", - "tt2713778", - "tt0095478", - "tt0319758", - "tt0115974", - "tt0078895", - "tt0030811", - "tt0068537", - "tt5037902", - "tt3727054", - "tt0055469", - "tt0027342", - "tt0091939", - "tt0060479", - "tt0039821", - "tt2226321", - "tt3257064", - "tt4938602", - "tt5766420", - "tt0108631", - "tt5363648", - "tt0111299", - "tt0058701", - "tt2727732", - "tt3756838", - "tt1243634", - "tt4162012", - "tt0053106", - "tt0446071", - "tt0104857", - "tt0021739", - "tt0101465", - "tt3481826", - "tt2168000", - "tt4164040", - "tt4653370", - "tt2492562", - "tt1157732", - "tt4688342", - "tt4972386", - "tt4867024", - "tt0847830", - "tt0054879", - "tt2260850", - "tt0091433", - "tt4716958", - "tt4741354", - "tt0357111", - "tt0061678", - "tt4677128", - "tt2364774", - "tt0060742", - "tt1338556", - "tt0493450", - "tt2367066", - "tt1712159", - "tt2094825", - "tt2883448", - "tt5000698", - "tt5170338", - "tt1870548", - "tt3704008", - "tt0120487", - "tt3904754", - "tt3770426", - "tt5275886", - "tt2659240", - "tt4247428", - "tt4695462", - "tt1590844", - "tt2375021", - "tt2516274", - "tt5436486", - "tt2950330", - "tt4932436", - "tt4035268", - "tt4096620", - "tt0327951", - "tt3186946", - "tt5707248", - "tt3116054", - "tt4924618", - "tt3587696", - "tt2025570", - "tt4809238", - "tt0060049", - "tt0107521", - "tt5605328", - "tt3743384", - "tt0113362", - "tt4681414", - "tt0414852", - "tt0064227", - "tt4610372", - "tt4651932", - "tt0082175", - "tt3115694", - "tt1247640", - "tt0091552", - "tt1951161", - "tt0207145", - "tt3290882", - "tt3828488", - "tt0217894", - "tt5583930", - "tt0193524", - "tt0030062", - "tt3523852", - "tt3170902", - "tt4122468", - "tt1847529", - "tt2167819", - "tt1546381", - "tt2051872", - "tt0058450", - "tt2007413", - "tt4038670", - "tt2862454", - "tt370375", - "tt0059405", - "tt4908644", - "tt1762308", - "tt4156646", - "tt0056049", - "tt0063213", - "tt0269587", - "tt2078718", - "tt0084239", - "tt0338290", - "tt4466336", - "tt0040643", - "tt4899510", - "tt5561592", - "tt0712523", - "tt3560686", - "tt3966404", - "tt0113398", - "tt3175438", - "tt0046001", - "tt0044067", - "tt0043721", - "tt0042182", - "tt0050692", - "tt0043603", - "tt0045646", - "tt0047675", - "tt0043043", - "tt0712586", - "tt0046366", - "tt0044962", - "tt0048290", - "tt0042679", - "tt0046051", - "tt0048391", - "tt0712374", - "tt0043829", - "tt0044853", - "tt0049477", - "tt0044455", - "tt0044400", - "tt0504306", - "tt0046684", - "tt2505818", - "tt0045604", - "tt0047178", - "tt0712176", - "tt0044330", - "tt0712168", - "tt3737650", - "tt4437298", - "tt3098874", - "tt3621360", - "tt4008758", - "tt0073357", - "tt0046487", - "tt0145400", - "tt0078991", - "tt4453306", - "tt0056846", - "tt0040497", - "tt5589750", - "tt2976864", - "tt0405508", - "tt0055093", - "tt0084843", - "tt3409440", - "tt3603104", - "tt0042895", - "tt0086655", - "tt4106306", - "tt0399104", - "tt1260567", - "tt0453533", - "tt2293276", - "tt0051591", - "tt0072446", - "tt0016847", - "tt5268648", - "tt0486420", - "tt5556144", - "tt3369350", - "tt4159182", - "tt2818252", - "tt0058898", - "tt3252998", - "tt0279353", - "tt0084503", - "tt0094783", - "tt0084269", - "tt3161326", - "tt2165933", - "tt0266850", - "tt0100026", - "tt0046533", - "tt5509732", - "tt0180626", - "tt0800318", - "tt1608516", - "tt0805559", - "tt0294425", - "tt3721082", - "tt3486542", - "tt0055572", - "tt4202970", - "tt0430932", - "tt3830574", - "tt0099572", - "tt3970874", - "tt5106116", - "tt0120491", - "tt4115932", - "tt3146120", - "tt0066380", - "tt0051179", - "tt5001576", - "tt2464690", - "tt0113932", - "tt3696804", - "tt5329524", - "tt0089366", - "tt3172678", - "tt0094087", - "tt0080097", - "tt4292420", - "tt0059250", - "tt3362914", - "tt0226976", - "tt0096028", - "tt4681452", - "tt4163636", - "tt0054156", - "tt0049095", - "tt0140883", - "tt2215395", - "tt4665250", - "tt4536494", - "tt2944970", - "tt4161932", - "tt3317158", - "tt1235166", - "tt2507238", - "tt4875694", - "tt3760966", - "tt3040224", - "tt4288636", - "tt5439464", - "tt3195054", - "tt2005268", - "tt0271271", - "tt2593224", - "tt0098659", - "tt0186726", - "tt0245380", - "tt0387898", - "tt0192618", - "tt2388621", - "tt5347932", - "tt5370376", - "tt0045487", - "tt4924646", - "tt0274636", - "tt1827429", - "tt3590608", - "tt0096465", - "tt5513770", - "tt4524168", - "tt1735495", - "tt3881192", - "tt0091710", - "tt4794814", - "tt5538124", - "tt0196632", - "tt0069225", - "tt0095384", - "tt3234082", - "tt0274761", - "tt0414078", - "tt0063152", - "tt3062742", - "tt0111495", - "tt0077435", - "tt4218644", - "tt1741542", - "tt1745787", - "tt0108394", - "tt0111507", - "tt4396080", - "tt2392672", - "tt4399984", - "tt0059348", - "tt3727982", - "tt3742378", - "tt0093951", - "tt4800418", - "tt4412362", - "tt0310203", - "tt3035858", - "tt0093312", - "tt0117534", - "tt3685586", - "tt1220911", - "tt1074191", - "tt3319508", - "tt5017928", - "tt3948500", - "tt3993730", - "tt1629715", - "tt4359416", - "tt3576044", - "tt3563892", - "tt4994256", - "tt5106298", - "tt5304688", - "tt0059417", - "tt4614654", - "tt3958098", - "tt4481310", - "tt4991632", - "tt2992000", - "tt1238305", - "tt3786530", - "tt2205453", - "tt3701160", - "tt0175777", - "tt0097528", - "tt5340362", - "tt2767366", - "tt3257638", - "tt0054936", - "tt3120916", - "tt5145828", - "tt0103069", - "tt2991224", - "tt0208990", - "tt0032888", - "tt1605765", - "tt3869392", - "tt3907314", - "tt2728086", - "tt5083702", - "tt4079142", - "tt4264754", - "tt0049031", - "tt0053453", - "tt0143746", - "tt5448304", - "tt0101324", - "tt0043992", - "tt1990217", - "tt4498460", - "tt4176750", - "tt2534634", - "tt4296800", - "tt0047860", - "tt4062896", - "tt4084566", - "tt2004279", - "tt2390327", - "tt2288568", - "tt3498950", - "tt5354588", - "tt0305665", - "tt2690560", - "tt3956722", - "tt3825278", - "tt3509662", - "tt5180998", - "tt4668808", - "tt0087016", - "tt3202872", - "tt0228786", - "tt0092020", - "tt3750942", - "tt2100671", - "tt2337470", - "tt0266643", - "tt2545384", - "tt0094813", - "tt3818826", - "tt4341532", - "tt5247042", - "tt1880278", - "tt2380513", - "tt0056370", - "tt2247696", - "tt3417172", - "tt4048964", - "tt3223394", - "tt4702118", - "tt0273799", - "tt4293656", - "tt4242936", - "tt4576246", - "tt3203364", - "tt3732474", - "tt5231268", - "tt2088865", - "tt3753372", - "tt5221208", - "tt0213260", - "tt4102728", - "tt5111790", - "tt3448072", - "tt3377548", - "tt1756750", - "tt0402755", - "tt3605262", - "tt4768190", - "tt3090634", - "tt0040090", - "tt3184934", - "tt0063534", - "tt0299943", - "tt0083557", - "tt0102062", - "tt0173886", - "tt0098718", - "tt3892822", - "tt0052869", - "tt0095640", - "tt5204384", - "tt5046534", - "tt4481934", - "tt1731767", - "tt4838472", - "tt3586930", - "tt3855240", - "tt0112682", - "tt0382142", - "tt3043386", - "tt1754799", - "tt0066516", - "tt3626804", - "tt3560464", - "tt3685756", - "tt2378401", - "tt0365149", - "tt0256466", - "tt2531282", - "tt4304830", - "tt4399942", - "tt1934172", - "tt5317546", - "tt2318625", - "tt0192255", - "tt3210710", - "tt0301485", - "tt4630848", - "tt0038924", - "tt0131986", - "tt4689996", - "tt0128666", - "tt2880472", - "tt0180177", - "tt0034936", - "tt0043362", - "tt0116319", - "tt0440004", - "tt2355132", - "tt0202595", - "tt0097884", - "tt3218368", - "tt0202521", - "tt0073219", - "tt0061002", - "tt5026308", - "tt4530804", - "tt0090019", - "tt2766004", - "tt3826150", - "tt2120857", - "tt1273235", - "tt0113057", - "tt0053198", - "tt2506256", - "tt0209223", - "tt4747354", - "tt0361467", - "tt4944352", - "tt2202798", - "tt4974584", - "tt4075520", - "tt0164648", - "tt5070196", - "tt2315500", - "tt5073746", - "tt0099406", - "tt4982260", - "tt4971480", - "tt2383382", - "tt4717202", - "tt0924527", - "tt0057058", - "tt1611330", - "tt5186076", - "tt0920470", - "tt3064620", - "tt5280366", - "tt0115543", - "tt2018086", - "tt0030628", - "tt3012526", - "tt1542767", - "tt5210048", - "tt2039359", - "tt4502456", - "tt4328196", - "tt2866824", - "tt4556352", - "tt3732518", - "tt2417134", - "tt0356476", - "tt1334278", - "tt4563702", - "tt2124096", - "tt1285239", - "tt0301893", - "tt4720674", - "tt0157016", - "tt2039389", - "tt4374460", - "tt5062762", - "tt2545692", - "tt0438580", - "tt1720276", - "tt0079012", - "tt3462002", - "tt5133810", - "tt2882156", - "tt1410013", - "tt0215167", - "tt0783494", - "tt5062804", - "tt2064865", - "tt2490352", - "tt2039390", - "tt0425468", - "tt0413900", - "tt2400685", - "tt0470023", - "tt0357648", - "tt2039366", - "tt3320502", - "tt2964654", - "tt2256703", - "tt1646894", - "tt1942839", - "tt0491722", - "tt0950740", - "tt4766018", - "tt2006707", - "tt1332026", - "tt0290321", - "tt5171176", - "tt2537390", - "tt1733111", - "tt4767950", - "tt1431115", - "tt2871116", - "tt0099496", - "tt3600588", - "tt0417397", - "tt4767274", - "tt4119590", - "tt1013651", - "tt4462408", - "tt5210078", - "tt0085622", - "tt3709678", - "tt2158649", - "tt3833822", - "tt2464622", - "tt3837162", - "tt4076824", - "tt0816577", - "tt0036384", - "tt0076410", - "tt0906638", - "tt0088318", - "tt1597522", - "tt1167513", - "tt0130298", - "tt0067778", - "tt1802529", - "tt3147106", - "tt0028988", - "tt2481276", - "tt3669520", - "tt2404217", - "tt4040072", - "tt5228440", - "tt4163644", - "tt3708528", - "tt3020666", - "tt0051846", - "tt0040550", - "tt3042408", - "tt4727110", - "tt1554921", - "tt3625952", - "tt2297812", - "tt1264904", - "tt0282223", - "tt0084100", - "tt1655413", - "tt5135978", - "tt0046695", - "tt0332369", - "tt3103632", - "tt3970482", - "tt4144206", - "tt3147930", - "tt4690134", - "tt4011466", - "tt3478510", - "tt1735462", - "tt2405372", - "tt4309612", - "tt2980626", - "tt1460646", - "tt2371399", - "tt2325474", - "tt3624628", - "tt2974520", - "tt1433089", - "tt1242521", - "tt0016232", - "tt0104114", - "tt0060802", - "tt0337103", - "tt3866420", - "tt2381287", - "tt5028778", - "tt4788602", - "tt2638048", - "tt3377996", - "tt0923973", - "tt3578794", - "tt1479668", - "tt1855152", - "tt0079665", - "tt2936180", - "tt3525584", - "tt4009460", - "tt1342403", - "tt0069967", - "tt2219650", - "tt2988490", - "tt3209148", - "tt2630526", - "tt4654328", - "tt4214874", - "tt0051568", - "tt0199763", - "tt0188769", - "tt3179406", - "tt0245920", - "tt4097612", - "tt5031014", - "tt2958390", - "tt0058458", - "tt0084549", - "tt4273170", - "tt3400460", - "tt4246212", - "tt3055402", - "tt4054678", - "tt0275274", - "tt2572330", - "tt3685218", - "tt0066841", - "tt4141260", - "tt3783274", - "tt1587414", - "tt3786474", - "tt4467202", - "tt0089832", - "tt4838316", - "tt2841572", - "tt3871940", - "tt0795441", - "tt5045592", - "tt0080318", - "tt4544008", - "tt0081428", - "tt1029234", - "tt2876906", - "tt4126304", - "tt5056034", - "tt3056040", - "tt0426568", - "tt0250593", - "tt0043915", - "tt0186910", - "tt0089110", - "tt0044370", - "tt2626926", - "tt0087225", - "tt0058374", - "tt0199810", - "tt3442634", - "tt0117275", - "tt3962210", - "tt4265878", - "tt0313634", - "tt3902600", - "tt2263210", - "tt3483194", - "tt1323535", - "tt0094886", - "tt3234196", - "tt0057687", - "tt2710368", - "tt0058751", - "tt2197912", - "tt4188202", - "tt5038216", - "tt0059915", - "tt3132632", - "tt4725904", - "tt0814685", - "tt3762666", - "tt0080144", - "tt4846826", - "tt0036706", - "tt2862392", - "tt1332007", - "tt3218580", - "tt2689958", - "tt1612319", - "tt0077984", - "tt4215766", - "tt2241750", - "tt0299179", - "tt3923082", - "tt4391742", - "tt0126004", - "tt2196488", - "tt3346824", - "tt1343703", - "tt0069072", - "tt2346406", - "tt4938846", - "tt0347909", - "tt2929890", - "tt1343712", - "tt3854104", - "tt0061781", - "tt4216808", - "tt2476552", - "tt0046427", - "tt0118150", - "tt0048355", - "tt0258816", - "tt4197632", - "tt3132244", - "tt0192657", - "tt0033654", - "tt0072149", - "tt0079687", - "tt0050799", - "tt0043946", - "tt0071385", - "tt0053371", - "tt0041209", - "tt0049476", - "tt0051818", - "tt0073698", - "tt0064990", - "tt0051940", - "tt1754406", - "tt4137902", - "tt0762089", - "tt4568166", - "tt1773793", - "tt1368153", - "tt0056021", - "tt0772762", - "tt0080668", - "tt3168808", - "tt5084214", - "tt1961324", - "tt3573598", - "tt0389182", - "tt1362318", - "tt0086087", - "tt0067077", - "tt0075299", - "tt0042298", - "tt2458392", - "tt1587359", - "tt1550533", - "tt5022680", - "tt1279976", - "tt4579410", - "tt4144156", - "tt2311428", - "tt1380078", - "tt0046121", - "tt3972068", - "tt3644570", - "tt2608324", - "tt2387600", - "tt3953834", - "tt2591692", - "tt3204144", - "tt2334896", - "tt0243390", - "tt3500724", - "tt4074502", - "tt0322674", - "tt2707848", - "tt3400286", - "tt4401604", - "tt3509426", - "tt4559742", - "tt2291242", - "tt0095715", - "tt1863943", - "tt0042344", - "tt2611390", - "tt4652128", - "tt1762887", - "tt1878519", - "tt4298966", - "tt3524578", - "tt3163304", - "tt2901516", - "tt4073696", - "tt4648826", - "tt3670782", - "tt0071733", - "tt4510898", - "tt1718915", - "tt1999246", - "tt1954520", - "tt3697270", - "tt0370242", - "tt2936470", - "tt0086026", - "tt3318220", - "tt3137546", - "tt2276258", - "tt0096287", - "tt0078015", - "tt0077640", - "tt2364997", - "tt2428612", - "tt3665860", - "tt0062036", - "tt3088516", - "tt2664712", - "tt3844362", - "tt0086840", - "tt2517300", - "tt1338687", - "tt3044244", - "tt3494676", - "tt1360860", - "tt0086890", - "tt0086542", - "tt2392810", - "tt4128382", - "tt0267287", - "tt4563294", - "tt3574218", - "tt0987918", - "tt4192636", - "tt0070460", - "tt3814486", - "tt2176874", - "tt1528734", - "tt2637378", - "tt2610240", - "tt4382618", - "tt2343473", - "tt4156700", - "tt3271120", - "tt0020815", - "tt3182590", - "tt2473762", - "tt2361602", - "tt3134422", - "tt2594950", - "tt2311948", - "tt4498162", - "tt3508830", - "tt1629374", - "tt3142234", - "tt2861532", - "tt4259658", - "tt3910602", - "tt2705542", - "tt1265294", - "tt0113221", - "tt3146294", - "tt0109551", - "tt0457652", - "tt0028114", - "tt1314280", - "tt2535348", - "tt0052600", - "tt0162211", - "tt0131200", - "tt0060092", - "tt1870543", - "tt0292516", - "tt3309136", - "tt0044928", - "tt1830459", - "tt3700852", - "tt0123221", - "tt4305562", - "tt1176244", - "tt4437046", - "tt0398027", - "tt3362908", - "tt1946347", - "tt3855850", - "tt4125300", - "tt4012432", - "tt3962798", - "tt0162928", - "tt2518294", - "tt3446906", - "tt0128801", - "tt3628898", - "tt0402115", - "tt0033922", - "tt0114663", - "tt4173442", - "tt3784566", - "tt0083366", - "tt0070130", - "tt4289948", - "tt0289181", - "tt4262142", - "tt0027438", - "tt0867418", - "tt2282703", - "tt1714843", - "tt0200669", - "tt2836370", - "tt3248600", - "tt1568816", - "tt0872020", - "tt0052893", - "tt0100436", - "tt0070959", - "tt3924798", - "tt1519461", - "tt0066479", - "tt1322362", - "tt0125946", - "tt2822742", - "tt0123288", - "tt0099546", - "tt0065439", - "tt4440036", - "tt2650646", - "tt3100052", - "tt1588337", - "tt2134170", - "tt2404593", - "tt3772918", - "tt1846479", - "tt2844798", - "tt0035415", - "tt0031862", - "tt3814950", - "tt3455850", - "tt2649194", - "tt2785464", - "tt2446600", - "tt0096098", - "tt3576084", - "tt2621664", - "tt3100636", - "tt4738466", - "tt4561026", - "tt3539664", - "tt0060675", - "tt0058056", - "tt0199733", - "tt1114717", - "tt3950488", - "tt2274604", - "tt3324302", - "tt0020531", - "tt0019686", - "tt3094252", - "tt0020708", - "tt0036427", - "tt0024916", - "tt1180329", - "tt1925421", - "tt0061634", - "tt0117739", - "tt3196684", - "tt2191880", - "tt0069765", - "tt1294977", - "tt1092016", - "tt3138166", - "tt2282737", - "tt0047529", - "tt2562850", - "tt4028826", - "tt4674500", - "tt0121369", - "tt1568799", - "tt3188560", - "tt0080843", - "tt3105418", - "tt2095762", - "tt0293007", - "tt2131674", - "tt3478186", - "tt2328813", - "tt2503768", - "tt1702003", - "tt1320293", - "tt1646887", - "tt0248751", - "tt0347752", - "tt0082927", - "tt3103412", - "tt0423871", - "tt4340888", - "tt0823187", - "tt3667270", - "tt3091772", - "tt2768018", - "tt3150574", - "tt2466654", - "tt2322482", - "tt2243067", - "tt1626648", - "tt3409392", - "tt3620418", - "tt2855026", - "tt1864443", - "tt1573484", - "tt1094584", - "tt0042040", - "tt0063564", - "tt2562870", - "tt1503646", - "tt0032653", - "tt2368926", - "tt4065510", - "tt1864269", - "tt4448648", - "tt2562944", - "tt1864277", - "tt0076065", - "tt4573800", - "tt1730714", - "tt0439591", - "tt0248752", - "tt0382937", - "tt2187444", - "tt0054494", - "tt0270846", - "tt4575100", - "tt3062880", - "tt0287337", - "tt0249535", - "tt0048308", - "tt0051792", - "tt0085692", - "tt0110097", - "tt1544590", - "tt0080610", - "tt1299384", - "tt3538766", - "tt1977087", - "tt2048824", - "tt3172112", - "tt0172348", - "tt2273275", - "tt3238462", - "tt0301777", - "tt4214708", - "tt0080430", - "tt1825901", - "tt2365001", - "tt2974790", - "tt1308094", - "tt3214248", - "tt4008778", - "tt1153543", - "tt4190550", - "tt0874272", - "tt3012340", - "tt3579168", - "tt2544766", - "tt4662412", - "tt2390994", - "tt1827512", - "tt2346720", - "tt0995747", - "tt3121860", - "tt3667152", - "tt4700538", - "tt0139692", - "tt3504542", - "tt2089721", - "tt0306943", - "tt3101474", - "tt0071864", - "tt0079252", - "tt1183276", - "tt1252298", - "tt0065651", - "tt0049177", - "tt0200071", - "tt0825239", - "tt0026922", - "tt3501046", - "tt1130982", - "tt0056514", - "tt1894560", - "tt0070046", - "tt2147589", - "tt4453498", - "tt3472226", - "tt3794422", - "tt2570414", - "tt3447876", - "tt2189978", - "tt0074745", - "tt0092226", - "tt3519192", - "tt0082272", - "tt0069881", - "tt0047213", - "tt3411420", - "tt0258013", - "tt0107762", - "tt0059934", - "tt0056066", - "tt0117477", - "tt0411819", - "tt0104267", - "tt1708524", - "tt0064390", - "tt0139718", - "tt2720726", - "tt0165998", - "tt3600960", - "tt0103030", - "tt0120164", - "tt0025509", - "tt2403981", - "tt3210998", - "tt0054671", - "tt0006689", - "tt2852406", - "tt2950236", - "tt2081314", - "tt3655522", - "tt0080718", - "tt3675486", - "tt0044135", - "tt2948606", - "tt2638104", - "tt1706625", - "tt0981350", - "tt0164422", - "tt3263690", - "tt3594796", - "tt4409852", - "tt0085426", - "tt0314502", - "tt2394003", - "tt2552316", - "tt3160020", - "tt0075696", - "tt3655172", - "tt2723576", - "tt0104732", - "tt1645138", - "tt0470131", - "tt0001371", - "tt1518215", - "tt0099859", - "tt3720794", - "tt1836953", - "tt0477078", - "tt0847743", - "tt0144688", - "tt2293138", - "tt0217749", - "tt3823994", - "tt0361127", - "tt2543508", - "tt1032856", - "tt2815720", - "tt0972374", - "tt0028691", - "tt4621642", - "tt2451550", - "tt3851324", - "tt1737796", - "tt0390833", - "tt2209744", - "tt3420108", - "tt2554648", - "tt0110737", - "tt2531168", - "tt2551396", - "tt2447338", - "tt4328584", - "tt2199543", - "tt2514976", - "tt2075373", - "tt2766268", - "tt3553414", - "tt3626970", - "tt2212670", - "tt3914706", - "tt2704650", - "tt0054473", - "tt0757923", - "tt2400275", - "tt2475454", - "tt0455925", - "tt3842398", - "tt0063381", - "tt3413692", - "tt1854592", - "tt3104656", - "tt0091671", - "tt2330666", - "tt0279475", - "tt0095360", - "tt3215846", - "tt2875926", - "tt0053149", - "tt0045826", - "tt3688018", - "tt2788556", - "tt3674410", - "tt3552892", - "tt3684490", - "tt2705326", - "tt0138664", - "tt0035521", - "tt0060536", - "tt0206692", - "tt1236457", - "tt0142001", - "tt1687221", - "tt2326554", - "tt0094789", - "tt2896036", - "tt3905756", - "tt3593120", - "tt3148952", - "tt0441613", - "tt1784359", - "tt2571502", - "tt0118996", - "tt0047568", - "tt3104818", - "tt0061784", - "tt0081027", - "tt4008606", - "tt0070302", - "tt1035736", - "tt0344510", - "tt3815426", - "tt0128591", - "tt0064816", - "tt0055146", - "tt0090563", - "tt4460190", - "tt3907674", - "tt2780588", - "tt2772762", - "tt2788228", - "tt0401383", - "tt0102988", - "tt3016266", - "tt0795459", - "tt0110620", - "tt3159050", - "tt2004216", - "tt2231630", - "tt2070897", - "tt0058089", - "tt2856930", - "tt3133246", - "tt2409812", - "tt1867091", - "tt1015471", - "tt0117613", - "tt3459472", - "tt0160521", - "tt3202374", - "tt0160522", - "tt3036600", - "tt3545810", - "tt0303678", - "tt4304408", - "tt3212392", - "tt1515088", - "tt3331846", - "tt0062414", - "tt3328442", - "tt4173174", - "tt0490236", - "tt3093520", - "tt0164961", - "tt1861445", - "tt3313908", - "tt2758880", - "tt0090667", - "tt0839846", - "tt0074720", - "tt1413797", - "tt3358296", - "tt0881384", - "tt1907688", - "tt3485702", - "tt4539292", - "tt3090324", - "tt2093867", - "tt1699090", - "tt0473753", - "tt2714410", - "tt0240143", - "tt1956700", - "tt2414040", - "tt3365778", - "tt2098491", - "tt4344878", - "tt2407484", - "tt1333888", - "tt2049589", - "tt2073128", - "tt2275519", - "tt3210388", - "tt0163639", - "tt0337587", - "tt1777610", - "tt2614700", - "tt1899353", - "tt0110150", - "tt0111804", - "tt0424934", - "tt1327601", - "tt0432314", - "tt0844322", - "tt0996382", - "tt0089918", - "tt2089864", - "tt3684484", - "tt2571354", - "tt3566370", - "tt2170403", - "tt3424672", - "tt2571340", - "tt2329459", - "tt2606614", - "tt0027967", - "tt2290113", - "tt0053472", - "tt2991092", - "tt0060544", - "tt0092593", - "tt3612616", - "tt1020773", - "tt2329582", - "tt2751390", - "tt0424942", - "tt3518096", - "tt0113676", - "tt2175665", - "tt2106350", - "tt0264809", - "tt0119682", - "tt3267258", - "tt0972356", - "tt0226648", - "tt0444673", - "tt3254548", - "tt0330044", - "tt0193925", - "tt3379694", - "tt2943974", - "tt3949648", - "tt0225634", - "tt3089922", - "tt0353168", - "tt0263278", - "tt0388474", - "tt0096968", - "tt3587128", - "tt3213222", - "tt0061826", - "tt1699745", - "tt2316868", - "tt0325181", - "tt0062266", - "tt2909932", - "tt0096240", - "tt1724965", - "tt2231489", - "tt2733258", - "tt0451954", - "tt0025903", - "tt2474438", - "tt2111292", - "tt0411270", - "tt0116789", - "tt3881700", - "tt4234734", - "tt0403718", - "tt0023038", - "tt3586634", - "tt3061836", - "tt2406572", - "tt0025830", - "tt0026267", - "tt1984248", - "tt0027087", - "tt3158138", - "tt3314628", - "tt3104572", - "tt1737650", - "tt2290710", - "tt3003758", - "tt0381456", - "tt2093990", - "tt0040465", - "tt2610252", - "tt0047310", - "tt2963344", - "tt1756508", - "tt2165236", - "tt0026558", - "tt1468843", - "tt0808339", - "tt3868150", - "tt3131456", - "tt1096999", - "tt0027042", - "tt2245349", - "tt3569356", - "tt0100200", - "tt2023500", - "tt0068738", - "tt4132598", - "tt0382944", - "tt0067847", - "tt1187043", - "tt3385034", - "tt0004150", - "tt0040142", - "tt2553424", - "tt0116341", - "tt2252304", - "tt0073747", - "tt2852432", - "tt2624316", - "tt4419652", - "tt3627000", - "tt1634003", - "tt1876502", - "tt2942522", - "tt3202306", - "tt1893199", - "tt0060107", - "tt0056111", - "tt2072263", - "tt0020695", - "tt1656192", - "tt0066997", - "tt2141739", - "tt0309799", - "tt1149361", - "tt0996930", - "tt3918368", - "tt1874797", - "tt0814042", - "tt3446852", - "tt2674040", - "tt3655370", - "tt1986161", - "tt4146230", - "tt1727373", - "tt2495778", - "tt3837198", - "tt0101700", - "tt4175742", - "tt3450116", - "tt1603933", - "tt1792806", - "tt2712154", - "tt4196462", - "tt0372532", - "tt0045941", - "tt0024475", - "tt2570738", - "tt0048964", - "tt2091240", - "tt3329350", - "tt0827773", - "tt2788002", - "tt2409818", - "tt0367082", - "tt1379182", - "tt0444182", - "tt0036709", - "tt1966566", - "tt3657420", - "tt2177629", - "tt2363518", - "tt2261434", - "tt3706190", - "tt0085474", - "tt1692301", - "tt1211890", - "tt0039636", - "tt2324384", - "tt2183716", - "tt2934340", - "tt3833470", - "tt3887360", - "tt3430042", - "tt4145350", - "tt2380560", - "tt2224506", - "tt1778357", - "tt2276480", - "tt2940280", - "tt0059894", - "tt1782253", - "tt0062446", - "tt2294963", - "tt2450520", - "tt1609132", - "tt0055910", - "tt0377556", - "tt0024115", - "tt3775614", - "tt1757769", - "tt2062969", - "tt1014805", - "tt2458698", - "tt2701778", - "tt3508590", - "tt0113667", - "tt1675759", - "tt1604589", - "tt0248912", - "tt2357461", - "tt1355638", - "tt0216787", - "tt0425132", - "tt0044958", - "tt0112856", - "tt0315110", - "tt2241691", - "tt0038300", - "tt0022787", - "tt3529260", - "tt3082826", - "tt2271685", - "tt1243939", - "tt3629548", - "tt3825444", - "tt2009406", - "tt2141941", - "tt3001638", - "tt2831404", - "tt3171246", - "tt1625326", - "tt2340076", - "tt2380564", - "tt0426550", - "tt0424867", - "tt1556243", - "tt2600730", - "tt0114268", - "tt0338022", - "tt0039591", - "tt4065336", - "tt0080907", - "tt2465378", - "tt3415872", - "tt0087837", - "tt3107328", - "tt0303668", - "tt1757112", - "tt2373550", - "tt0312409", - "tt2318405", - "tt2076349", - "tt3502284", - "tt0172238", - "tt1213019", - "tt0270560", - "tt4034118", - "tt0071968", - "tt2094877", - "tt0078458", - "tt1854580", - "tt0199128", - "tt4260656", - "tt0244521", - "tt0030396", - "tt0379985", - "tt1217043", - "tt2966560", - "tt0043526", - "tt4150316", - "tt0033902", - "tt2418372", - "tt3512066", - "tt0070338", - "tt1924277", - "tt3911058", - "tt0184309", - "tt2545936", - "tt2912144", - "tt3289944", - "tt0069400", - "tt0065944", - "tt0458436", - "tt3090326", - "tt0815207", - "tt2299206", - "tt2707804", - "tt2787874", - "tt0052027", - "tt0125659", - "tt0028257", - "tt2651214", - "tt0026973", - "tt0372303", - "tt3627780", - "tt0018528", - "tt2837366", - "tt0184915", - "tt3972398", - "tt0468450", - "tt2071620", - "tt3801438", - "tt3547900", - "tt4179824", - "tt1992147", - "tt3460064", - "tt2350852", - "tt0970172", - "tt1576772", - "tt2309764", - "tt0106536", - "tt0100928", - "tt3097490", - "tt3952328", - "tt3122122", - "tt2139843", - "tt3511012", - "tt3596200", - "tt3158306", - "tt0269338", - "tt0220470", - "tt2406038", - "tt2415496", - "tt3103598", - "tt0034167", - "tt0452624", - "tt0415391", - "tt2960450", - "tt0488658", - "tt2194988", - "tt0456836", - "tt1058743", - "tt0142193", - "tt0120481", - "tt1992278", - "tt0963743", - "tt0841101", - "tt2176786", - "tt4208628", - "tt3974790", - "tt0041327", - "tt2821088", - "tt0117101", - "tt0043643", - "tt0114057", - "tt1859530", - "tt2167056", - "tt0958884", - "tt0070464", - "tt2693076", - "tt3220576", - "tt0064155", - "tt2609758", - "tt2314036", - "tt2006721", - "tt2357003", - "tt0097567", - "tt3245656", - "tt0837791", - "tt2294473", - "tt2241047", - "tt2338062", - "tt0071790", - "tt0032325", - "tt0038056", - "tt0033458", - "tt0037826", - "tt2928288", - "tt2640502", - "tt2177336", - "tt0029984", - "tt1639397", - "tt2282058", - "tt0032326", - "tt0082183", - "tt3635852", - "tt0079002", - "tt0031149", - "tt3634940", - "tt2196844", - "tt0114783", - "tt2371158", - "tt1613056", - "tt3302594", - "tt3351428", - "tt2836260", - "tt0028709", - "tt0072267", - "tt0028707", - "tt3918546", - "tt2196059", - "tt2475898", - "tt3520698", - "tt4064460", - "tt2735480", - "tt3958180", - "tt0027441", - "tt3957278", - "tt1549069", - "tt0027439", - "tt2314414", - "tt1410015", - "tt3317942", - "tt2369543", - "tt0026199", - "tt0027442", - "tt2451742", - "tt0040799", - "tt0379357", - "tt2077721", - "tt1929339", - "tt1590013", - "tt2988384", - "tt1324875", - "tt2737050", - "tt1422197", - "tt0026197", - "tt1323933", - "tt1815717", - "tt1247657", - "tt1087527", - "tt2363439", - "tt1809318", - "tt0110189", - "tt0064425", - "tt0027440", - "tt0024968", - "tt0028708", - "tt0144262", - "tt3765746", - "tt0040778", - "tt3715300", - "tt3353690", - "tt0038929", - "tt4087916", - "tt0032324", - "tt2406252", - "tt1871257", - "tt0040394", - "tt0106752", - "tt3688596", - "tt1826753", - "tt0279830", - "tt0212867", - "tt1863323", - "tt0283542", - "tt2957250", - "tt0087814", - "tt0087885", - "tt2907640", - "tt3965714", - "tt1727254", - "tt0114732", - "tt0042352", - "tt2811878", - "tt2976472", - "tt0499469", - "tt1451708", - "tt0073632", - "tt0096288", - "tt3396842", - "tt0025463", - "tt2372222", - "tt2179936", - "tt4045482", - "tt0031514", - "tt0081688", - "tt1914281", - "tt3249524", - "tt0066207", - "tt0082053", - "tt3660850", - "tt0080662", - "tt3317762", - "tt0085956", - "tt2576828", - "tt2945474", - "tt0084003", - "tt0087821", - "tt0045917", - "tt3332122", - "tt2340784", - "tt2836202", - "tt1924273", - "tt1589627", - "tt2072134", - "tt3831400", - "tt0047348", - "tt3074732", - "tt3949650", - "tt0064988", - "tt1429392", - "tt1821593", - "tt0041610", - "tt3307800", - "tt0457437", - "tt2880148", - "tt0375611", - "tt0086551", - "tt1800338", - "tt2865558", - "tt1686865", - "tt2545088", - "tt2199448", - "tt3996536", - "tt3171886", - "tt0922591", - "tt2545338", - "tt3560658", - "tt1847750", - "tt2937752", - "tt0195871", - "tt0964516", - "tt1292594", - "tt2280358", - "tt2238420", - "tt0068428", - "tt0250264", - "tt0047797", - "tt0272766", - "tt2994962", - "tt0776798", - "tt1734438", - "tt0312946", - "tt3202486", - "tt1653064", - "tt0118668", - "tt1336999", - "tt2806908", - "tt1588875", - "tt3595312", - "tt1337090", - "tt0080728", - "tt0062083", - "tt0056101", - "tt3874418", - "tt0021815", - "tt0160484", - "tt0092550", - "tt0456978", - "tt0177852", - "tt2741806", - "tt0318497", - "tt0456980", - "tt2707858", - "tt0456981", - "tt0456982", - "tt0401119", - "tt1135522", - "tt3504158", - "tt2936864", - "tt1650041", - "tt1986806", - "tt2187149", - "tt2336960", - "tt3837154", - "tt1692478", - "tt0091830", - "tt2136689", - "tt1964618", - "tt0856288", - "tt0042256", - "tt3492330", - "tt1704586", - "tt3021744", - "tt2222206", - "tt0061394", - "tt2643394", - "tt0193510", - "tt3331044", - "tt0006684", - "tt3630862", - "tt3013588", - "tt3608848", - "tt2727296", - "tt2123146", - "tt2221404", - "tt0443518", - "tt2912522", - "tt1606829", - "tt0061905", - "tt2403815", - "tt1223082", - "tt0049682", - "tt2559244", - "tt0061495", - "tt0072235", - "tt0064612", - "tt3985472", - "tt0040548", - "tt0218141", - "tt3106926", - "tt3103326", - "tt0106379", - "tt0069158", - "tt0064409", - "tt0486666", - "tt0042782", - "tt0078122", - "tt1738351", - "tt1754708", - "tt0053399", - "tt2793578", - "tt2207050", - "tt2289538", - "tt2407380", - "tt0079371", - "tt0075669", - "tt1653827", - "tt0043262", - "tt0076827", - "tt3554976", - "tt0150614", - "tt0071960", - "tt2247432", - "tt0115940", - "tt3678938", - "tt2393825", - "tt1188996", - "tt0472478", - "tt2014295", - "tt3215844", - "tt0040810", - "tt0056691", - "tt2271671", - "tt3667798", - "tt0358767", - "tt2493456", - "tt0039532", - "tt3234906", - "tt2873250", - "tt1870375", - "tt3807402", - "tt0448906", - "tt2606112", - "tt3769334", - "tt1351770", - "tt0496385", - "tt2787824", - "tt0036166", - "tt0034593", - "tt2714934", - "tt2889844", - "tt0103973", - "tt0856776", - "tt1609492", - "tt3108170", - "tt0190503", - "tt2315588", - "tt2263814", - "tt2057455", - "tt2071424", - "tt2403419", - "tt0062873", - "tt3084836", - "tt3120810", - "tt1233381", - "tt3365338", - "tt2813906", - "tt2945504", - "tt2121782", - "tt2531258", - "tt3691706", - "tt1801071", - "tt0056568", - "tt0185335", - "tt1663698", - "tt2650642", - "tt0040489", - "tt1995304", - "tt0081144", - "tt0064004", - "tt0054474", - "tt2500392", - "tt1705115", - "tt2374902", - "tt1591499", - "tt2137119", - "tt3322420", - "tt2789532", - "tt3558196", - "tt2017634", - "tt2795078", - "tt2374196", - "tt2222192", - "tt0052946", - "tt3057836", - "tt0666194", - "tt1760985", - "tt0069848", - "tt0117070", - "tt3479624", - "tt2614006", - "tt0055020", - "tt0273282", - "tt0051016", - "tt0055261", - "tt1230165", - "tt2871058", - "tt0105227", - "tt0794399", - "tt3091552", - "tt2224313", - "tt2372776", - "tt3560580", - "tt3469420", - "tt0059166", - "tt3335192", - "tt2818448", - "tt0083258", - "tt2557848", - "tt2866660", - "tt3279276", - "tt3185154", - "tt2381319", - "tt0265343", - "tt2405792", - "tt3640822", - "tt0290673", - "tt0099564", - "tt3029570", - "tt3142958", - "tt1951166", - "tt1867611", - "tt0053168", - "tt1993286", - "tt0103110", - "tt3843960", - "tt1270786", - "tt2931194", - "tt3214002", - "tt2156785", - "tt3063996", - "tt2100575", - "tt1170380", - "tt3130506", - "tt0398971", - "tt2350496", - "tt1751720", - "tt1608369", - "tt1472583", - "tt3091282", - "tt0099334", - "tt3142872", - "tt3134060", - "tt0362225", - "tt2798172", - "tt3811920", - "tt2210842", - "tt3345466", - "tt3037406", - "tt1068649", - "tt2955316", - "tt1816518", - "tt2739524", - "tt0402500", - "tt3222720", - "tt0074979", - "tt2700582", - "tt2188734", - "tt0084555", - "tt1176102", - "tt3103576", - "tt3129564", - "tt1723656", - "tt1403987", - "tt3516378", - "tt2679680", - "tt2835548", - "tt2275802", - "tt2511022", - "tt2852458", - "tt2210607", - "tt1217637", - "tt2718492", - "tt1125924", - "tt2671980", - "tt2654738", - "tt0369738", - "tt0235430", - "tt2709784", - "tt1506438", - "tt3506224", - "tt2748546", - "tt3091254", - "tt2515164", - "tt3737782", - "tt2536436", - "tt2622156", - "tt2371315", - "tt0048432", - "tt2595182", - "tt2641866", - "tt1407052", - "tt0361805", - "tt3330206", - "tt3044702", - "tt2265171", - "tt1698647", - "tt0067123", - "tt3259320", - "tt2140381", - "tt1825806", - "tt2708946", - "tt2785288", - "tt1920928", - "tt2717528", - "tt0064360", - "tt0065755", - "tt0059080", - "tt3089778", - "tt0061695", - "tt2363435", - "tt0400514", - "tt0075441", - "tt0143346", - "tt1974393", - "tt0063000", - "tt0081675", - "tt0163777", - "tt1450334", - "tt0081681", - "tt0066806", - "tt0095645", - "tt0310236", - "tt0207709", - "tt0495074", - "tt0063065", - "tt0183307", - "tt1817235", - "tt3386954", - "tt0876294", - "tt2379995", - "tt3112654", - "tt1545319", - "tt3482696", - "tt2459920", - "tt2088924", - "tt0096917", - "tt1555440", - "tt2294965", - "tt1825955", - "tt2180473", - "tt0089860", - "tt0106632", - "tt0072080", - "tt0068655", - "tt1439578", - "tt3742018", - "tt2949626", - "tt1629747", - "tt2543484", - "tt2239866", - "tt2374144", - "tt0326834", - "tt1794801", - "tt1843234", - "tt2747786", - "tt3173910", - "tt3139338", - "tt1188982", - "tt2082156", - "tt3417364", - "tt0033307", - "tt0049933", - "tt3717186", - "tt2218416", - "tt0249516", - "tt2181310", - "tt1784664", - "tt3417360", - "tt1927158", - "tt1240899", - "tt2059255", - "tt2072939", - "tt2312390", - "tt0052135", - "tt1763256", - "tt0389206", - "tt0237534", - "tt1117598", - "tt2763764", - "tt1309374", - "tt0363416", - "tt1242605", - "tt2357866", - "tt2173264", - "tt1305618", - "tt2112124", - "tt2930828", - "tt0045961", - "tt2395246", - "tt3528284", - "tt3296434", - "tt1137436", - "tt1407972", - "tt0289557", - "tt3685836", - "tt1564870", - "tt3024056", - "tt1954364", - "tt0110963", - "tt3077818", - "tt3465208", - "tt3169740", - "tt0047411", - "tt0416073", - "tt2203898", - "tt3684194", - "tt1205587", - "tt3069086", - "tt2565752", - "tt3479250", - "tt3416200", - "tt1864299", - "tt3487082", - "tt0254686", - "tt3187064", - "tt2065898", - "tt3032300", - "tt0113662", - "tt0044722", - "tt1959526", - "tt0099089", - "tt2361348", - "tt1855324", - "tt3530418", - "tt1241226", - "tt2359427", - "tt2366127", - "tt2379318", - "tt2243381", - "tt1235841", - "tt0109020", - "tt0320790", - "tt1225834", - "tt2181941", - "tt2181889", - "tt3176304", - "tt3152130", - "tt2843986", - "tt3315416", - "tt2223824", - "tt2860720", - "tt2257436", - "tt2219514", - "tt0371552", - "tt0319075", - "tt0439567", - "tt2556296", - "tt0211413", - "tt2996804", - "tt3451660", - "tt1660302", - "tt0348003", - "tt3089442", - "tt3469386", - "tt3664510", - "tt3062104", - "tt2274042", - "tt1785612", - "tt3259912", - "tt2375036", - "tt2917646", - "tt2214913", - "tt2358592", - "tt0098327", - "tt3478444", - "tt0079311", - "tt0080002", - "tt0074513", - "tt2304098", - "tt3581276", - "tt0067026", - "tt0075802", - "tt0201924", - "tt0200310", - "tt3280730", - "tt2603496", - "tt0091607", - "tt0086301", - "tt0164882", - "tt2502518", - "tt0058592", - "tt0224098", - "tt0105903", - "tt0187501", - "tt0199023", - "tt0063105", - "tt1292648", - "tt1611823", - "tt0072421", - "tt2239108", - "tt2947832", - "tt0278351", - "tt1982735", - "tt0083352", - "tt3239154", - "tt3354866", - "tt3215286", - "tt0823725", - "tt2189714", - "tt3503838", - "tt2175016", - "tt2437712", - "tt1954930", - "tt2562234", - "tt2846418", - "tt1586525", - "tt2207072", - "tt087", - "tt2457282", - "tt1176096", - "tt0324197", - "tt3106846", - "tt2322674", - "tt3451624", - "tt2444006", - "tt2752200", - "tt2865074", - "tt2584380", - "tt0216625", - "tt3456464", - "tt1109562", - "tt1906443", - "tt1772871", - "tt2235902", - "tt1987681", - "tt1381416", - "tt2066986", - "tt1638353", - "tt2561752", - "tt1590764", - "tt2235248", - "tt0338309", - "tt3037342", - "tt2315200", - "tt2343807", - "tt1826894", - "tt1992193", - "tt3320114", - "tt0425299", - "tt3350228", - "tt2907156", - "tt1852137", - "tt1282156", - "tt1535432", - "tt23951", - "tt3234078", - "tt3203890", - "tt2796782", - "tt0061996", - "tt0425055", - "tt2636814", - "tt2402600", - "tt1928338", - "tt2219792", - "tt2550112", - "tt2265179", - "tt1961580", - "tt1890448", - "tt0052698", - "tt2275656", - "tt2208778", - "tt2542502", - "tt2909482", - "tt0322802", - "tt1905042", - "tt0111800", - "tt3319234", - "tt2152198", - "tt2234032", - "tt3004788", - "tt1156444", - "tt0070801", - "tt2089863", - "tt1186371", - "tt0099809", - "tt0075201", - "tt0080743", - "tt0078128", - "tt0075202", - "tt0077135", - "tt0063596", - "tt0164360", - "tt0112800", - "tt0065102", - "tt0079891", - "tt0084105", - "tt0076939", - "tt0068372", - "tt0065495", - "tt0082174", - "tt0069380", - "tt0067009", - "tt0075833", - "tt0077292", - "tt0045034", - "tt0084267", - "tt0940918", - "tt0070085", - "tt2248805", - "tt1043429", - "tt0080958", - "tt0078360", - "tt0079147", - "tt1533749", - "tt0078393", - "tt0085628", - "tt0083828", - "tt0080172", - "tt0093015", - "tt0073121", - "tt0074300", - "tt0165195", - "tt0367602", - "tt0079432", - "tt0082482", - "tt0188794", - "tt0165363", - "tt0080420", - "tt0079896", - "tt0084014", - "tt0078250", - "tt0082072", - "tt1361529", - "tt0180826", - "tt0065172", - "tt1825735", - "tt0077664", - "tt0080726", - "tt2014351", - "tt0404823", - "tt0080828", - "tt0076692", - "tt0084678", - "tt0079899", - "tt0040917", - "tt0104567", - "tt2317484", - "tt3361152", - "tt2258858", - "tt2421224", - "tt2290151", - "tt1956655", - "tt0046149", - "tt0109969", - "tt2048889", - "tt0107666", - "tt0099395", - "tt0113449", - "tt0488539", - "tt3072668", - "tt0106732", - "tt0125841", - "tt0294631", - "tt0151778", - "tt0109161", - "tt0048333", - "tt1686125", - "tt0059407", - "tt0098681", - "tt2641874", - "tt0085354", - "tt3455214", - "tt2397531", - "tt0106451", - "tt1060256", - "tt3249408", - "tt1686907", - "tt2825716", - "tt2275551", - "tt2954184", - "tt2488740", - "tt2221558", - "tt2827520", - "tt0339579", - "tt2102500", - "tt0446319", - "tt0066277", - "tt0959452", - "tt0412519", - "tt0118721", - "tt0087806", - "tt1647413", - "tt2385074", - "tt0119628", - "tt0420136", - "tt1801085", - "tt3031022", - "tt1545489", - "tt2424752", - "tt2005185", - "tt2234397", - "tt2438644", - "tt0490078", - "tt0076470", - "tt1029231", - "tt2094969", - "tt0076594", - "tt1543055", - "tt0062357", - "tt2073516", - "tt0267785", - "tt0044936", - "tt0037871", - "tt1346669", - "tt2403991", - "tt0096309", - "tt2235682", - "tt0052810", - "tt3042926", - "tt0124102", - "tt1051217", - "tt1064932", - "tt2039369", - "tt0791304", - "tt1978428", - "tt0034922", - "tt0043954", - "tt0050717", - "tt0030581", - "tt0333458", - "tt0035009", - "tt3262722", - "tt2355921", - "tt0088380", - "tt0053241", - "tt3436442", - "tt0305751", - "tt0047211", - "tt0086972", - "tt0051993", - "tt1240284", - "tt2796776", - "tt2359810", - "tt0807521", - "tt1504960", - "tt3281258", - "tt2369154", - "tt1525580", - "tt2231536", - "tt0084340", - "tt2069887", - "tt1815185", - "tt1951176", - "tt1663680", - "tt1406032", - "tt3387320", - "tt0123179", - "tt2099577", - "tt0765432", - "tt0434440", - "tt0337593", - "tt0893382", - "tt0106973", - "tt2452384", - "tt2379082", - "tt2112219", - "tt1754257", - "tt2458820", - "tt3321254", - "tt1477185", - "tt1280013", - "tt2143788", - "tt2186819", - "tt2207778", - "tt2221362", - "tt2779318", - "tt2245188", - "tt2088869", - "tt0980999", - "tt0029638", - "tt1854236", - "tt2060540", - "tt2957680", - "tt2879770", - "tt2318158", - "tt2992590", - "tt2385306", - "tt2071466", - "tt1532538", - "tt2723720", - "tt2325719", - "tt2217936", - "tt0116717", - "tt2343685", - "tt1890486", - "tt1754074", - "tt2147303", - "tt1297301", - "tt2560206", - "tt1922721", - "tt0443678", - "tt3138730", - "tt0461495", - "tt0089026", - "tt2369127", - "tt1976003", - "tt3198244", - "tt2369702", - "tt2661620", - "tt2837602", - "tt2310622", - "tt2739012", - "tt2246520", - "tt3009336", - "tt1876267", - "tt2703958", - "tt1737795", - "tt0102913", - "tt2215215", - "tt2577652", - "tt0072389", - "tt0086494", - "tt0243976", - "tt2275949", - "tt0114928", - "tt1887785", - "tt1900854", - "tt2356999", - "tt2533024", - "tt2191400", - "tt2090497", - "tt2285752", - "tt0101560", - "tt1742178", - "tt2281345", - "tt0068361", - "tt0041724", - "tt0078832", - "tt0061693", - "tt0076852", - "tt2357926", - "tt1073486", - "tt2072078", - "tt3329358", - "tt3279582", - "tt2120160", - "tt0089763", - "tt2503968", - "tt2855648", - "tt2577150", - "tt0088192", - "tt2349854", - "tt2187115", - "tt1884369", - "tt2076223", - "tt2235515", - "tt3334538", - "tt2413338", - "tt2599898", - "tt1992150", - "tt3233548", - "tt2655788", - "tt1294794", - "tt1935201", - "tt1642669", - "tt2480784", - "tt1764645", - "tt1709653", - "tt2941258", - "tt2386327", - "tt2930770", - "tt1978451", - "tt0385690", - "tt1942989", - "tt1680679", - "tt1134665", - "tt0313597", - "tt2853806", - "tt2693114", - "tt0342088", - "tt1242548", - "tt0168492", - "tt2244098", - "tt0289080", - "tt0181317", - "tt0814656", - "tt0875609", - "tt0318034", - "tt1674772", - "tt0337661", - "tt0213704", - "tt2843344", - "tt1075035", - "tt0095714", - "tt0110770", - "tt0424810", - "tt0261203", - "tt0179074", - "tt1582551", - "tt0035755", - "tt1636542", - "tt2668102", - "tt0228438", - "tt0034637", - "tt0064135", - "tt2607336", - "tt0301429", - "tt0122008", - "tt1981059", - "tt2250032", - "tt0039495", - "tt0120699", - "tt0128690", - "tt0128089", - "tt0360985", - "tt1990420", - "tt1667317", - "tt1974254", - "tt2424028", - "tt0128996", - "tt1071820", - "tt1241721", - "tt0035614", - "tt2258212", - "tt2807624", - "tt0122617", - "tt2359347", - "tt2319879", - "tt2075280", - "tt0114393", - "tt2476644", - "tt3257582", - "tt0074569", - "tt1479320", - "tt1680119", - "tt0138792", - "tt2311912", - "tt0062204", - "tt1109582", - "tt1429433", - "tt2511058", - "tt0121841", - "tt1854569", - "tt2553908", - "tt0139687", - "tt0407095", - "tt1866919", - "tt1333994", - "tt3040608", - "tt1411274", - "tt0003286", - "tt0837559", - "tt2722326", - "tt2462758", - "tt1725157", - "tt2536816", - "tt2782646", - "tt0032283", - "tt3157196", - "tt0035612", - "tt0034538", - "tt2058597", - "tt3044782", - "tt1998402", - "tt2324730", - "tt0084750", - "tt2305644", - "tt0128083", - "tt2073520", - "tt0088881", - "tt2274172", - "tt0097935", - "tt0119367", - "tt0072222", - "tt2070852", - "tt1693653", - "tt3120538", - "tt2294923", - "tt0104997", - "tt1018877", - "tt0107704", - "tt0662643", - "tt0093896", - "tt2334178", - "tt0078187", - "tt2234457", - "tt0326923", - "tt2130136", - "tt2887012", - "tt1654829", - "tt2075296", - "tt3105008", - "tt1986951", - "tt1823125", - "tt1663673", - "tt3008034", - "tt2352394", - "tt0057603", - "tt2885536", - "tt1965057", - "tt2290749", - "tt1351177", - "tt2255976", - "tt2140499", - "tt0997179", - "tt2359002", - "tt0122768", - "tt1814905", - "tt1391087", - "tt2197905", - "tt1339161", - "tt2887426", - "tt2592046", - "tt2650986", - "tt2748088", - "tt2404269", - "tt1806827", - "tt2241741", - "tt0072933", - "tt2958484", - "tt2567390", - "tt1872138", - "tt2104985", - "tt2108541", - "tt1409772", - "tt3034278", - "tt2350432", - "tt0194104", - "tt2658768", - "tt2551428", - "tt0074701", - "tt2167715", - "tt2999688", - "tt2125698", - "tt1894616", - "tt1333885", - "tt2912578", - "tt0137890", - "tt2261542", - "tt2814372", - "tt2436516", - "tt0472514", - "tt2806788", - "tt2861320", - "tt1837587", - "tt1899142", - "tt2664080", - "tt0061851", - "tt2237822", - "tt1893326", - "tt2079512", - "tt2385104", - "tt2856272", - "tt0058073", - "tt2369235", - "tt1805454", - "tt3095900", - "tt2190367", - "tt2422212", - "tt1789091", - "tt2358937", - "tt2935888", - "tt3067038", - "tt1826689", - "tt1942876", - "tt1506998", - "tt0105434", - "tt2093280", - "tt0100645", - "tt1233548", - "tt0169707", - "tt2349212", - "tt0102950", - "tt2112131", - "tt1735350", - "tt1759682", - "tt0053171", - "tt2608998", - "tt0070180", - "tt0116607", - "tt2380408", - "tt2056520", - "tt2276778", - "tt1439235", - "tt2521724", - "tt2261629", - "tt2782834", - "tt1313130", - "tt2259392", - "tt2243246", - "tt0254256", - "tt0195209", - "tt0273777", - "tt1054116", - "tt1967697", - "tt0137995", - "tt1797348", - "tt1921119", - "tt2072066", - "tt1787837", - "tt0129831", - "tt0461894", - "tt0782690", - "tt3010462", - "tt0138745", - "tt2132485", - "tt1954811", - "tt2245223", - "tt1937222", - "tt1817276", - "tt1876360", - "tt2324098", - "tt2059193", - "tt1656194", - "tt0934458", - "tt2448704", - "tt1568929", - "tt2308497", - "tt1876373", - "tt0014624", - "tt2669872", - "tt0050709", - "tt1847584", - "tt0111105", - "tt2321257", - "tt0198723", - "tt0114581", - "tt2239078", - "tt2336846", - "tt0024685", - "tt0094066", - "tt2131523", - "tt2204282", - "tt0230825", - "tt0023028", - "tt1303039", - "tt1253565", - "tt1406035", - "tt2337993", - "tt0423034", - "tt1942951", - "tt0059335", - "tt2114440", - "tt2552570", - "tt1128959", - "tt0120125", - "tt2319002", - "tt2393787", - "tt1427689", - "tt0109494", - "tt0120086", - "tt0849258", - "tt0082241", - "tt0370613", - "tt0959880", - "tt1757939", - "tt2942226", - "tt0139060", - "tt2504910", - "tt0023213", - "tt0021735", - "tt0072637", - "tt2626432", - "tt1535975", - "tt0110197", - "tt2332801", - "tt0469965", - "tt0054692", - "tt0179809", - "tt2650718", - "tt2627146", - "tt2170228", - "tt1980033", - "tt2317102", - "tt2927068", - "tt2125653", - "tt2180465", - "tt1333887", - "tt2397425", - "tt0800235", - "tt0098369", - "tt2086830", - "tt0976074", - "tt1957955", - "tt1382728", - "tt2332881", - "tt2386203", - "tt0865557", - "tt2321517", - "tt0132893", - "tt1852040", - "tt1231285", - "tt2395155", - "tt1874789", - "tt2381989", - "tt0084538", - "tt2056740", - "tt1276962", - "tt0023631", - "tt2085888", - "tt2113073", - "tt0119893", - "tt2170301", - "tt1492849", - "tt0397696", - "tt1572146", - "tt2691554", - "tt0357842", - "tt1977817", - "tt1754633", - "tt0082213", - "tt2580928", - "tt2592336", - "tt0020018", - "tt2429870", - "tt2111466", - "tt0059312", - "tt0050174", - "tt1305039", - "tt1587411", - "tt0046006", - "tt1979345", - "tt1934260", - "tt2182001", - "tt2388208", - "tt1666168", - "tt2417568", - "tt1934269", - "tt0839773", - "tt1821449", - "tt2199711", - "tt0156115", - "tt2071458", - "tt2167791", - "tt2649366", - "tt1552436", - "tt2206354", - "tt2375664", - "tt0289320", - "tt2317171", - "tt0065374", - "tt2137818", - "tt1956407", - "tt0287826", - "tt2741136", - "tt0037902", - "tt2248944", - "tt1964630", - "tt0037402", - "tt2099788", - "tt0038936", - "tt1975158", - "tt2108546", - "tt0037053", - "tt2258281", - "tt0135613", - "tt1845283", - "tt2649128", - "tt2387413", - "tt1978480", - "tt2474156", - "tt2493386", - "tt0461674", - "tt1877788", - "tt2328749", - "tt2093255", - "tt1945087", - "tt2391009", - "tt0150742", - "tt2025511", - "tt2265116", - "tt2055593", - "tt0135024", - "tt2082335", - "tt1367236", - "tt2088735", - "tt2485988", - "tt2542544", - "tt1438214", - "tt2162565", - "tt2125423", - "tt2473572", - "tt2312702", - "tt0405022", - "tt1512897", - "tt1696535", - "tt0016545", - "tt0923824", - "tt0060186", - "tt1098326", - "tt2433190", - "tt0061343", - "tt2536030", - "tt1764275", - "tt2579836", - "tt2139965", - "tt2178802", - "tt1856047", - "tt2226178", - "tt0178352", - "tt1405809", - "tt2370378", - "tt2069798", - "tt1856014", - "tt2281267", - "tt2417286", - "tt2397573", - "tt1735200", - "tt0235539", - "tt2288037", - "tt2451374", - "tt2024519", - "tt1735221", - "tt0078868", - "tt1491605", - "tt1833835", - "tt2247134", - "tt2590280", - "tt2358412", - "tt1572491", - "tt0094849", - "tt2667242", - "tt2404519", - "tt2339487", - "tt2064816", - "tt2705666", - "tt2538176", - "tt2240784", - "tt2062559", - "tt1961604", - "tt1961279", - "tt2181989", - "tt1980959", - "tt0060531", - "tt1519663", - "tt1808240", - "tt1893364", - "tt0380277", - "tt0043967", - "tt0056174", - "tt2209414", - "tt0117397", - "tt1091869", - "tt2378000", - "tt1340588", - "tt0120166", - "tt1624413", - "tt1473397", - "tt0865561", - "tt2279083", - "tt0069974", - "tt2617734", - "tt1934436", - "tt1924336", - "tt0387925", - "tt0108495", - "tt2103171", - "tt2053378", - "tt0374621", - "tt0069197", - "tt0069303", - "tt0286516", - "tt0085991", - "tt0049271", - "tt2150332", - "tt0820863", - "tt1700443", - "tt2246673", - "tt0089009", - "tt0282971", - "tt1782453", - "tt2008486", - "tt0084358", - "tt2459496", - "tt2458582", - "tt0046471", - "tt1776088", - "tt1846649", - "tt0053112", - "tt2404153", - "tt1656197", - "tt1507261", - "tt1160012", - "tt1710994", - "tt1659215", - "tt1666800", - "tt2209300", - "tt2380247", - "tt2201083", - "tt0036901", - "tt1540931", - "tt2209386", - "tt2312602", - "tt2281425", - "tt2197849", - "tt0056886", - "tt1117523", - "tt2321901", - "tt0035506", - "tt1930327", - "tt1549584", - "tt2363219", - "tt1815998", - "tt1527813", - "tt1738366", - "tt1674057", - "tt2190475", - "tt2078733", - "tt0082343", - "tt2073693", - "tt0056207", - "tt1786442", - "tt0116348", - "tt0039040", - "tt0454082", - "tt2324544", - "tt0139719", - "tt0142260", - "tt0183717", - "tt0431839", - "tt0990413", - "tt2536086", - "tt2120057", - "tt0077944", - "tt0044698", - "tt0901241", - "tt1795029", - "tt0197273", - "tt1976608", - "tt1955043", - "tt1724982", - "tt2088029", - "tt2183152", - "tt1989712", - "tt2327495", - "tt2219868", - "tt2417854", - "tt1090749", - "tt1508245", - "tt2083379", - "tt2370034", - "tt1414404", - "tt0239969", - "tt0067197", - "tt1986871", - "tt0313532", - "tt0088693", - "tt2406636", - "tt1632477", - "tt2377938", - "tt0045603", - "tt0280185", - "tt2253708", - "tt1375789", - "tt2525450", - "tt0225002", - "tt0280911", - "tt0281354", - "tt0280676", - "tt0113370", - "tt0280022", - "tt0281701", - "tt0280021", - "tt0282269", - "tt0380263", - "tt1928123", - "tt2310157", - "tt0051671", - "tt1787054", - "tt0280499", - "tt2275861", - "tt1239374", - "tt2006894", - "tt2475692", - "tt1964570", - "tt0056693", - "tt2141717", - "tt2293218", - "tt0282393", - "tt1919137", - "tt2592910", - "tt2203951", - "tt2279313", - "tt1877580", - "tt1720073", - "tt0106469", - "tt2650548", - "tt2056778", - "tt2403849", - "tt1497876", - "tt2168938", - "tt1499302", - "tt1626838", - "tt2328505", - "tt2334731", - "tt0198803", - "tt2209426", - "tt2401621", - "tt2610768", - "tt1013607", - "tt2238803", - "tt0422037", - "tt0662647", - "tt0109282", - "tt1628069", - "tt0437806", - "tt0662644", - "tt2327453", - "tt2174072", - "tt0976867", - "tt2009402", - "tt1084683", - "tt0986075", - "tt0783476", - "tt0344777", - "tt1783798", - "tt2355823", - "tt1430116", - "tt1547084", - "tt1860359", - "tt0163178", - "tt1783232", - "tt1319569", - "tt2152887", - "tt2124074", - "tt0111579", - "tt2069708", - "tt1785394", - "tt1329370", - "tt1568892", - "tt1620604", - "tt1891970", - "tt2255735", - "tt1602620", - "tt2622420", - "tt0072204", - "tt0086051", - "tt2212658", - "tt1787988", - "tt0422419", - "tt0199065", - "tt1082577", - "tt0104507", - "tt1435990", - "tt0029957", - "tt2053339", - "tt1555058", - "tt0407783", - "tt0050210", - "tt2081260", - "tt0137004", - "tt0360323", - "tt1507564", - "tt1167660", - "tt2460656", - "tt1872819", - "tt2069100", - "tt2062580", - "tt0030348", - "tt2020110", - "tt2102396", - "tt1728982", - "tt2128694", - "tt2599106", - "tt2321373", - "tt1904887", - "tt1860181", - "tt2297906", - "tt2458314", - "tt1727491", - "tt1756595", - "tt1687856", - "tt1490678", - "tt1730342", - "tt1235853", - "tt2400284", - "tt1664813", - "tt0074916", - "tt0119705", - "tt1493813", - "tt1758610", - "tt1954470", - "tt0142251", - "tt2167970", - "tt1693830", - "tt0278737", - "tt1663321", - "tt0141625", - "tt0278012", - "tt0093891", - "tt0040580", - "tt2633114", - "tt0278885", - "tt0138795", - "tt0279055", - "tt1363091", - "tt1841840", - "tt1954688", - "tt0278930", - "tt2096541", - "tt0490701", - "tt1772984", - "tt1650031", - "tt1845849", - "tt1661067", - "tt0132726", - "tt0372824", - "tt0086168", - "tt1356285", - "tt0974584", - "tt2040608", - "tt1861307", - "tt0091820", - "tt1828972", - "tt2062961", - "tt2308860", - "tt2093109", - "tt1667905", - "tt1582235", - "tt0124899", - "tt2560016", - "tt1935909", - "tt2023367", - "tt1857605", - "tt2209266", - "tt2229842", - "tt0117216", - "tt0175327", - "tt2077826", - "tt0062746", - "tt1114723", - "tt0125591", - "tt2290789", - "tt0048549", - "tt2094854", - "tt1441083", - "tt0302566", - "tt0456069", - "tt1842532", - "tt2123996", - "tt0032359", - "tt2081255", - "tt1329457", - "tt1679332", - "tt1865425", - "tt0089821", - "tt0069027", - "tt0099029", - "tt2044888", - "tt2411024", - "tt2460690", - "tt2306783", - "tt0094011", - "tt2288742", - "tt2546480", - "tt0086650", - "tt1857797", - "tt1891942", - "tt2388725", - "tt0301414", - "tt2323551", - "tt1736636", - "tt1850394", - "tt2414702", - "tt1349486", - "tt0103666", - "tt0378897", - "tt0127932", - "tt1406044", - "tt1510918", - "tt0411234", - "tt0070380", - "tt1194238", - "tt2375417", - "tt0058275", - "tt0427582", - "tt2180333", - "tt0452675", - "tt1822302", - "tt1406042", - "tt1406029", - "tt2063834", - "tt1759660", - "tt0447431", - "tt1303042", - "tt0371739", - "tt2511190", - "tt2075107", - "tt2412338", - "tt2662762", - "tt2064984", - "tt1528510", - "tt2166214", - "tt2112281", - "tt1781773", - "tt2249167", - "tt1664708", - "tt2053352", - "tt1709157", - "tt0110463", - "tt0414879", - "tt1888555", - "tt0092776", - "tt1634286", - "tt2193782", - "tt1854582", - "tt0419198", - "tt0177323", - "tt0862888", - "tt0165494", - "tt1893277", - "tt2234275", - "tt0337907", - "tt2080291", - "tt1582383", - "tt2186933", - "tt1595061", - "tt0281718", - "tt0055609", - "tt2088919", - "tt1803178", - "tt1566541", - "tt0966573", - "tt0074868", - "tt0960801", - "tt2301039", - "tt0059262", - "tt2051850", - "tt1155588", - "tt2077677", - "tt2184211", - "tt1320395", - "tt0058063", - "tt1733525", - "tt0813547", - "tt0056363", - "tt2222550", - "tt0157182", - "tt1748224", - "tt1230161", - "tt1795588", - "tt0054851", - "tt0113249", - "tt2251662", - "tt0997229", - "tt1975320", - "tt1446695", - "tt2404645", - "tt0004395", - "tt1895314", - "tt2388920", - "tt2401575", - "tt0072072", - "tt1840911", - "tt0004284", - "tt0003961", - "tt1323914", - "tt0004091", - "tt1284656", - "tt0004011", - "tt0003934", - "tt0004100", - "tt0007613", - "tt0003733", - "tt0004736", - "tt1671513", - "tt2235988", - "tt0051542", - "tt2370792", - "tt0479257", - "tt2256514", - "tt2296404", - "tt1528225", - "tt1984279", - "tt2120152", - "tt0374807", - "tt1303037", - "tt1482186", - "tt2303104", - "tt2397619", - "tt1601238", - "tt1430625", - "tt1521791", - "tt2078586", - "tt2365776", - "tt1754374", - "tt2091368", - "tt0055578", - "tt1535100", - "tt1476427", - "tt1630052", - "tt1815799", - "tt0055116", - "tt2120779", - "tt0055114", - "tt2069885", - "tt0055564", - "tt2389344", - "tt1753584", - "tt0045037", - "tt0023422", - "tt2294729", - "tt2077772", - "tt2106739", - "tt1500906", - "tt0174577", - "tt1804607", - "tt1656179", - "tt2319760", - "tt0033356", - "tt1980162", - "tt1540816", - "tt0446771", - "tt2113113", - "tt1667691", - "tt1565958", - "tt1130965", - "tt1213921", - "tt0038557", - "tt0057974", - "tt0770753", - "tt1327827", - "tt1632726", - "tt0040751", - "tt2078672", - "tt2302561", - "tt1682186", - "tt0054423", - "tt0057628", - "tt0054289", - "tt0163554", - "tt0054788", - "tt0040430", - "tt1020955", - "tt0046904", - "tt0277657", - "tt0092828", - "tt0180752", - "tt0281325", - "tt0277784", - "tt0281236", - "tt0280574", - "tt0082437", - "tt0058605", - "tt0069507", - "tt1825166", - "tt1859522", - "tt1667133", - "tt1407055", - "tt1650555", - "tt0138624", - "tt1583737", - "tt0178515", - "tt1183939", - "tt1312222", - "tt0805640", - "tt2082197", - "tt1303900", - "tt1864491", - "tt1693107", - "tt2184095", - "tt1233487", - "tt0072260", - "tt2283748", - "tt0014440", - "tt1493858", - "tt1608782", - "tt2171416", - "tt0070569", - "tt1927068", - "tt1720189", - "tt2215273", - "tt1806911", - "tt0071784", - "tt2232446", - "tt1832405", - "tt1997289", - "tt1623660", - "tt2108538", - "tt1684225", - "tt1754478", - "tt2087820", - "tt2476918", - "tt0187819", - "tt1646221", - "tt2273507", - "tt2296692", - "tt1964868", - "tt1604554", - "tt2047891", - "tt1678054", - "tt0021148", - "tt2331066", - "tt2210879", - "tt1217059", - "tt1949554", - "tt1872880", - "tt2008562", - "tt1644503", - "tt2317744", - "tt1918886", - "tt2391843", - "tt0032819", - "tt1023725", - "tt0992360", - "tt2302931", - "tt1673736", - "tt1624376", - "tt0973512", - "tt1783392", - "tt0036161", - "tt1240282", - "tt0036398", - "tt1625562", - "tt0100416", - "tt1939753", - "tt0048459", - "tt2073137", - "tt0808289", - "tt2078613", - "tt0053247", - "tt1279426", - "tt1807892", - "tt2049511", - "tt0086146", - "tt1637656", - "tt1864526", - "tt1394039", - "tt1394038", - "tt1530975", - "tt2140189", - "tt1900942", - "tt1394037", - "tt0985431", - "tt1646979", - "tt0265080", - "tt2174089", - "tt0244046", - "tt1942937", - "tt0166849", - "tt0067283", - "tt0246294", - "tt2256858", - "tt0026684", - "tt2395349", - "tt0350725", - "tt1670638", - "tt1462053", - "tt1579235", - "tt0080947", - "tt1142803", - "tt1675309", - "tt1606382", - "tt0351075", - "tt0247043", - "tt1723126", - "tt1510114", - "tt1830166", - "tt0969031", - "tt0216533", - "tt1393566", - "tt0216719", - "tt0983613", - "tt0070350", - "tt1698551", - "tt1250861", - "tt1776222", - "tt2281111", - "tt1530953", - "tt2091243", - "tt1511425", - "tt1359553", - "tt1831623", - "tt1569931", - "tt0110480", - "tt0337744", - "tt0337721", - "tt1734442", - "tt0087135", - "tt221579", - "tt0089279", - "tt1172957", - "tt0048818", - "tt1600435", - "tt2367036", - "tt1311710", - "tt0035430", - "tt2116909", - "tt1650394", - "tt0893570", - "tt1710354", - "tt0098157", - "tt0174260", - "tt1465513", - "tt0079726", - "tt0465434", - "tt1588374", - "tt2398282", - "tt1529331", - "tt0325857", - "tt0122890", - "tt0082770", - "tt0815498", - "tt1445520", - "tt0192782", - "tt1835920", - "tt1930344", - "tt0143487", - "tt0134275", - "tt0180854", - "tt0183761", - "tt0260049", - "tt0265637", - "tt0265407", - "tt2371411", - "tt1278429", - "tt2226301", - "tt0036093", - "tt1844635", - "tt0037811", - "tt2167873", - "tt1301308", - "tt0045954", - "tt1460641", - "tt1764508", - "tt1918806", - "tt0082487", - "tt1608182", - "tt1833879", - "tt1516593", - "tt1720172", - "tt1737747", - "tt1714127", - "tt0334267", - "tt1233576", - "tt0380625", - "tt0332398", - "tt0054425", - "tt0246567", - "tt2072268", - "tt1918639", - "tt1846526", - "tt0062092", - "tt1244505", - "tt1316540", - "tt1988544", - "tt1776252", - "tt0093578", - "tt0141187", - "tt2024555", - "tt0107604", - "tt1680311", - "tt1857596", - "tt1876901", - "tt0067508", - "tt0138942", - "tt0061017", - "tt0493155", - "tt1821385", - "tt0135361", - "tt0061802", - "tt0481009", - "tt0061833", - "tt1772424", - "tt1913002", - "tt1533053", - "tt2402613", - "tt1754277", - "tt0046846", - "tt2028530", - "tt2090463", - "tt1692227", - "tt1674776", - "tt0808245", - "tt1657885", - "tt1558256", - "tt0893610", - "tt1482991", - "tt1526578", - "tt1784538", - "tt0103336", - "tt1716739", - "tt0228508", - "tt0309379", - "tt1580021", - "tt2234550", - "tt2142955", - "tt2147293", - "tt1763194", - "tt0914368", - "tt1699498", - "tt1034090", - "tt0112906", - "tt2055666", - "tt1937388", - "tt0086369", - "tt0087418", - "tt0485877", - "tt2271135", - "tt1735900", - "tt2336373", - "tt2328503", - "tt0036356", - "tt2093044", - "tt0071477", - "tt2290147", - "tt1557720", - "tt1829041", - "tt1679681", - "tt1525570", - "tt1540262", - "tt1579948", - "tt1846252", - "tt0129358", - "tt2024351", - "tt0072156", - "tt1634524", - "tt0482886", - "tt0320795", - "tt1834614", - "tt1331115", - "tt1813327", - "tt1966594", - "tt2058124", - "tt2246234", - "tt2012645", - "tt1774438", - "tt1899100", - "tt2328841", - "tt0034128", - "tt0034682", - "tt2034741", - "tt0037450", - "tt0034685", - "tt1145157", - "tt0355609", - "tt1969175", - "tt1687254", - "tt1484954", - "tt0310233", - "tt1610516", - "tt1817088", - "tt1628043", - "tt1748051", - "tt0066360", - "tt2125651", - "tt1681666", - "tt2063008", - "tt1430811", - "tt0147347", - "tt0181323", - "tt1582268", - "tt0139288", - "tt1687216", - "tt1127886", - "tt0136823", - "tt0086876", - "tt0126426", - "tt1446673", - "tt1326259", - "tt1331092", - "tt0045466", - "tt0173863", - "tt0160578", - "tt2299577", - "tt2321445", - "tt0191839", - "tt1651337", - "tt2016894", - "tt2393829", - "tt1741694", - "tt0193738", - "tt1169133", - "tt2093951", - "tt1703232", - "tt1552173", - "tt0053732", - "tt2080323", - "tt2322683", - "tt1804508", - "tt1663660", - "tt1645129", - "tt0983250", - "tt2047670", - "tt1620785", - "tt2153406", - "tt1691343", - "tt2191861", - "tt1433817", - "tt2087985", - "tt1319032", - "tt0083561", - "tt2226666", - "tt1706317", - "tt0046049", - "tt1460739", - "tt1667826", - "tt1764664", - "tt0121853", - "tt0036075", - "tt0259621", - "tt0126449", - "tt1866230", - "tt1981568", - "tt0046829", - "tt1941668", - "tt0254749", - "tt0494206", - "tt2221032", - "tt1733118", - "tt1754944", - "tt1516595", - "tt1935749", - "tt0245850", - "tt0117288", - "tt0078313", - "tt1600438", - "tt1954498", - "tt1789724", - "tt1742084", - "tt0478213", - "tt1635659", - "tt1535962", - "tt0036449", - "tt2191641", - "tt1401643", - "tt1887759", - "tt0090925", - "tt0081053", - "tt1922689", - "tt0954348", - "tt2202427", - "tt1753899", - "tt1533818", - "tt2241069", - "tt0875613", - "tt2041321", - "tt1002567", - "tt1109616", - "tt1326277", - "tt1604070", - "tt1519468", - "tt1686126", - "tt1589505", - "tt0929259", - "tt1719634", - "tt1796503", - "tt2404553", - "tt1975205", - "tt2248789", - "tt1670932", - "tt2319889", - "tt0057652", - "tt2136759", - "tt1931470", - "tt1700489", - "tt1258201", - "tt1814790", - "tt1972646", - "tt2106763", - "tt1728986", - "tt2261471", - "tt2043979", - "tt2144938", - "tt2308797", - "tt1384591", - "tt1553199", - "tt2301291", - "tt0096936", - "tt1596264", - "tt1560969", - "tt2386231", - "tt1417067", - "tt1572154", - "tt0433346", - "tt2268617", - "tt1747924", - "tt2125496", - "tt1440136", - "tt0174685", - "tt1295026", - "tt1401636", - "tt0049065", - "tt0238417", - "tt0041772", - "tt0820482", - "tt0769775", - "tt1954780", - "tt0099349", - "tt1816705", - "tt0045696", - "tt1699513", - "tt1550312", - "tt1922751", - "tt1641633", - "tt0180845", - "tt1648154", - "tt1782415", - "tt0077877", - "tt1687900", - "tt1886504", - "tt1657470", - "tt0415727", - "tt1249307", - "tt0511739", - "tt0073327", - "tt0050870", - "tt1701976", - "tt1444680", - "tt0999873", - "tt0325957", - "tt1068243", - "tt0072179", - "tt1606228", - "tt1532384", - "tt0068966", - "tt1785411", - "tt1711465", - "tt1722476", - "tt1606761", - "tt1669277", - "tt1702921", - "tt1954214", - "tt0059464", - "tt0064729", - "tt0130633", - "tt0265587", - "tt0451108", - "tt0418451", - "tt1555218", - "tt2302529", - "tt0972855", - "tt1784575", - "tt2288129", - "tt0063690", - "tt0906013", - "tt0072615", - "tt0076127", - "tt0079636", - "tt0064677", - "tt0310022", - "tt0357201", - "tt2099673", - "tt0447642", - "tt0205782", - "tt2214945", - "tt1514043", - "tt0061060", - "tt1619277", - "tt1434944", - "tt2056501", - "tt1712187", - "tt0847745", - "tt1686902", - "tt1507250", - "tt1687277", - "tt0395713", - "tt1503714", - "tt2137376", - "tt2022347", - "tt1839596", - "tt1206086", - "tt1100906", - "tt1394322", - "tt0483200", - "tt0480775", - "tt1430620", - "tt0265307", - "tt2100546", - "tt1980130", - "tt1846803", - "tt0056452", - "tt0074671", - "tt1679538", - "tt1528313", - "tt1784670", - "tt1582196", - "tt0996952", - "tt0083675", - "tt1710627", - "tt1398999", - "tt1705120", - "tt1194612", - "tt1236370", - "tt0329042", - "tt0477457", - "tt0884214", - "tt0201057", - "tt1647692", - "tt1734578", - "tt1599975", - "tt1542852", - "tt1675197", - "tt1691153", - "tt0166199", - "tt0116791", - "tt0213749", - "tt1698639", - "tt1276988", - "tt1220873", - "tt1604577", - "tt1455618", - "tt1600701", - "tt1390533", - "tt1355640", - "tt1308754", - "tt1400558", - "tt1395183", - "tt0404552", - "tt977855", - "tt1340107", - "tt1241258", - "tt1430137", - "tt0295682", - "tt1506990", - "tt1475549", - "tt1787636", - "tt1589487", - "tt1343110", - "tt1634508", - "tt0489342", - "tt1781069", - "tt1129437", - "tt1566648", - "tt1101031", - "tt1440755", - "tt1285240", - "tt1308182", - "tt1583356", - "tt1382725", - "tt1705773", - "tt1446201", - "tt1212007", - "tt1474889", - "tt1430096", - "tt1456661", - "tt1136688", - "tt1264115", - "tt0421974", - "tt1328909", - "tt1535107", - "tt1018789", - "tt0494826", - "tt1754332", - "tt0988102", - "tt1512201", - "tt1263800", - "tt1003051", - "tt1198153", - "tt1613315", - "tt1305067", - "tt1051241", - "tt1543920", - "tt1573072", - "tt1192422", - "tt1326954", - "tt1458956", - "tt1390543", - "tt1344784", - "tt1352852", - "tt1103255", - "tt1678053", - "tt1334549", - "tt1154826", - "tt1292652", - "tt0969653", - "tt1225703", - "tt1493246", - "tt0106922", - "tt1198101", - "tt1555126", - "tt1451698", - "tt0489210", - "tt1158933", - "tt1059233", - "tt1620549", - "tt1287875", - "tt1273813", - "tt1426383", - "tt1370426", - "tt1235838", - "tt1217426", - "tt1590024", - "tt1629718", - "tt0904128", - "tt0475970", - "tt1124061", - "tt0847215", - "tt0469094", - "tt1183917", - "tt1190894", - "tt1492872", - "tt1568927", - "tt1568916", - "tt1277400", - "tt1070781", - "tt1569369", - "tt1401641", - "tt1292033", - "tt1610301", - "tt1035730", - "tt1459000", - "tt1598440", - "tt1236440", - "tt1345777", - "tt1311082", - "tt1320236", - "tt1378811", - "tt0472073", - "tt1149362", - "tt1251735", - "tt1422201", - "tt1322277", - "tt1254696", - "tt1090674", - "tt1192621", - "tt1215523", - "tt1591585", - "tt0443771", - "tt1451797", - "tt1112784", - "tt0479204", - "tt1501658", - "tt1342964", - "tt1227929", - "tt1526300", - "tt1148229", - "tt1085515", - "tt0386064", - "tt1522835", - "tt1310569", - "tt0974662", - "tt1471846", - "tt1075113", - "tt1274418", - "tt1242539", - "tt1091207", - "tt1489946", - "tt0993841", - "tt1024219", - "tt0499238", - "tt438488", - "tt1135089", - "tt1337040", - "tt1360833", - "tt1094296", - "tt1307456", - "tt0378428", - "tt1266121", - "tt1265993", - "tt1156470", - "tt1046936", - "tt1096991", - "tt0299594", - "tt0066001", - "tt0059114", - "tt1124396", - "tt0826711", - "tt1399952", - "tt0115644", - "tt0420251", - "tt1462651", - "tt1094661", - "tt1233247", - "tt0113368", - "tt1264914", - "tt0339535", - "tt0488763", - "tt1084019", - "tt0120265", - "tt0956208", - "tt1230545", - "tt0488762", - "tt0972558", - "tt0860866", - "tt0448993", - "tt1042499", - "tt0460485", - "tt0261014", - "tt0411795", - "tt1190537", - "tt0499262", - "tt0084156", - "tt1305621", - "tt0300000", - "tt0469838", - "tt0366894", - "tt0343095", - "tt0969754", - "tt0496328", - "tt0275623", - "tt0432103", - "tt0169590", - "tt0403358", - "tt0946998", - "tt1244496", - "tt0407251", - "tt1193516", - "tt0388423", - "tt0441048", - "tt0250223", - "tt0123532", - "tt0071207", - "tt0361240", - "tt1114258", - "tt0110570", - "tt0351461", - "tt0046688", - "tt0119298", - "tt0426236", - "tt0301949", - "tt0133162", - "tt0098063", - "tt0424227", - "tt0056290", - "tt0493393", - "tt0364517", - "tt0416316", - "tt0079315", - "tt0136759", - "tt0057422", - "tt0083109", - "tt0101301", - "tt0107447", - "tt0973844", - "tt1014796", - "tt0823158", - "tt0449338", - "tt0065848", - "tt0892737", - "tt0058135", - "tt0892737", - "tt0449338", - "tt0065848", - "tt0823158", - "tt1014796", - "tt0058135", - "tt0973844", - "tt0892737", - "tt0058135", - "tt0823158", - "tt1014796", - "tt0973844", - "tt0065848", - "tt0449338", - "tt0892737", - "tt0973844", - "tt0823158", - "tt0449338", - "tt0065848", - "tt0058135", - "tt1014796", - "tt1137448", - "tt0043590", - "tt1306953", - "tt0822858", - "tt0131468", - "tt2611060", - "tt1229345", - "tt11415816", - "tt1372692", - "tt0117395", - "tt0083929", - "tt8339444", - "tt4916178", - "tt1998368", - "tt0089537", - "tt5805768", - "tt1243375", - "tt5774060", - "tt1209319", - "tt2476426", - "tt2325908", - "tt0097323", - "tt00281811", - "tt1340798", - "tt10078502", - "tt1562328", - "tt0454792", - "tt7613260", - "tt1836926", - "tt2831118", - "tt10691288", - "tt0404225", - "tt5621712", - "tt3413690", - "tt0040578", - "tt1765660", - "tt0052047", - "tt0097555", - "tt10830086", - "tt0122718", - "tt3261182", - "tt12036096", - "tt10521028", - "tt6668212", - "tt0104745", - "tt3121430", - "tt0142244", - "tt6713802", - "tt5330938", - "tt6782632", - "tt1465518", - "tt0024631", - "tt6208096", - "tt5117326", - "tt7635268", - "tt0108596", - "tt6658510", - "tt0080149", - "tt1852028", - "tt3397266", - "tt0062455", - "tt9358256", - "tt1035733", - "tt3460560", - "tt0045492", - "tt0345967", - "tt1107850", - "tt1754078", - "tt0065104", - "tt0290843", - "tt10919974", - "tt0457482", - "tt6189052", - "tt8089234", - "tt0415167", - "tt7969836", - "tt7304802", - "tt1497617", - "tt1732563", - "tt0072623", - "tt0090866", - "tt0126946", - "tt9663666", - "tt1223932", - "tt5105720", - "tt1780967", - "tt5123896", - "tt1337055", - "tt4208886", - "tt4429160", - "tt0210299", - "tt7998238", - "tt0101817", - "tt9647768", - "tt8228288", - "tt0860462", - "tt10680412", - "tt3169780", - "tt0964586", - "tt9540566", - "tt3142346", - "tt8806886", - "tt3295734", - "tt5332252", - "tt11229886", - "tt9806336", - "tt0491698", - "tt0061162", - "tt11523762", - "tt2741098", - "tt1327701", - "tt2183752", - "tt3612126", - "tt0102795", - "tt0419967", - "tt3949186", - "tt0064417", - "tt6961658", - "tt0325352", - "tt5094990", - "tt0040566", - "tt0202478", - "tt9358160", - "tt7521000", - "tt9759888", - "tt9430698", - "tt0430059", - "tt4855062", - "tt0144681", - "tt0901693", - "tt6388948", - "tt5213016", - "tt0123380", - "tt0093748", - "tt3165218", - "tt0098139", - "tt1483799", - "tt9784068", - "tt0101819", - "tt2388677", - "tt0454224", - "tt8507516", - "tt1234559", - "tt8540100", - "tt5105742", - "tt0050585", - "tt1120889", - "tt6532954", - "tt1145479", - "tt0350659", - "tt6704880", - "tt6990224", - "tt9578746", - "tt11130668", - "tt0084412", - "tt9782756", - "tt9104296", - "tt6568874", - "tt0092897", - "tt0254252", - "tt8710832", - "tt0024352", - "tt0038895", - "tt0073342", - "tt0109699", - "tt2177511", - "tt2819446", - "tt00", - "tt9024292", - "tt1057581", - "tt0117768", - "tt4727514", - "tt1758770", - "tt6108090", - "tt0291832", - "tt0160376", - "tt0384736", - "tt0150021", - "tt0985049", - "tt0457643", - "tt0295721", - "tt9646548", - "tt11952660", - "tt0473658", - "tt9050330", - "tt6712118", - "tt0067513", - "tt0496245", - "tt1707687", - "tt0293573", - "tt0075993", - "tt2048918", - "tt0082556", - "tt4658482", - "tt2916772", - "tt1171220", - "tt0120414", - "tt4506686", - "tt0857275", - "tt2085986", - "tt0385057", - "tt10382610", - "tt1612143", - "tt2319456", - "tt0056963", - "tt7010456", - "tt5785854", - "tt9617582", - "tt1112756", - "tt7801350", - "tt10359764", - "tt0197203", - "tt2657292", - "tt9011916", - "tt10008784", - "tt0235618", - "tt6914122", - "tt10289350", - "tt0396659", - "tt6826526", - "tt10062530", - "tt0287635", - "tt0067324", - "tt5105636", - "tt10132922", - "tt8971476", - "tt1655416", - "tt1422786", - "tt6744360", - "tt0021874", - "tt9000466", - "tt0099254", - "tt9246830", - "tt10055028", - "tt8368406", - "tt0033887", - "tt0486506", - "tt9403508", - "tt0192301", - "tt0157871", - "tt6073760", - "tt6192716", - "tt6285944", - "tt4858674", - "tt0074473", - "tt9173418", - "tt3640100", - "tt4125844", - "tt2630352", - "tt3514810", - "tt0071983", - "tt0042665", - "tt1639082", - "tt2353955", - "tt1268204", - "tt8150698", - "tt7847324", - "tt10269518", - "tt0072024", - "tt0098219", - "tt0066216", - "tt8713448", - "tt10828204", - "tt1059955", - "tt3302266", - "tt0983946", - "tt2076229", - "tt10680114", - "tt11916278", - "tt10579956", - "tt10917276", - "tt8116640", - "tt9261416", - "tt0482473", - "tt8130454", - "tt11934706", - "tt3096908", - "tt0037674", - "tt8025296", - "tt1611913", - "tt8036226", - "tt0758017", - "tt3475020", - "tt10601432", - "tt1825712", - "tt7292306", - "tt6263490", - "tt8926976", - "tt5296086", - "tt7420444", - "tt9341104", - "tt10832236", - "tt8653640", - "tt2835658", - "tt0044718", - "tt8599562", - "tt8497798", - "tt7275840", - "tt0099039", - "tt4949412", - "tt0084182", - "tt1675192", - "tt0063747", - "tt4834150", - "tt9079952", - "tt0100879", - "tt1562450", - "tt0113849", - "tt0261552", - "tt0109262", - "tt3655680", - "tt9214832", - "tt0360140", - "tt10419672", - "tt10890570", - "tt5105650", - "tt2543826", - "tt10892554", - "tt0076024", - "tt0168331", - "tt1433108", - "tt10177634", - "tt1890425", - "tt0075859", - "tt2623502", - "tt11202796", - "tt8159302", - "tt8863066", - "tt4038046", - "tt11616596", - "tt1412334", - "tt6587640", - "tt5950068", - "tt0044881", - "tt10702760", - "tt11652546", - "tt8811348", - "tt0094007", - "tt4765928", - "tt0390042", - "tt5570680", - "tt9001652", - "tt2014271", - "tt10109764", - "tt6739796", - "tt9815998", - "tt8991268", - "tt0082747", - "tt3556590", - "tt9357288", - "tt1022513", - "tt0976060", - "tt1233528", - "tt0076301", - "tt0131461", - "tt0105396", - "tt0142240", - "tt1029238", - "tt10540242", - "tt7159566", - "tt0063054", - "tt3474776", - "tt1079448", - "tt8896224", - "tt0364603", - "tt1132286", - "tt1172069", - "tt0229335", - "tt0127545", - "tt1156479", - "tt1645748", - "tt6076810", - "tt6899324", - "tt0106837", - "tt1611947", - "tt0096154", - "tt0060192", - "tt1543211", - "tt5684728", - "tt6200160", - "tt0060126", - "tt10198072", - "tt4500196", - "tt0499556", - "tt0025238", - "tt0099079", - "tt0152930", - "tt0219058", - "tt11808612", - "tt0082244", - "tt1941438", - "tt3098276", - "tt6317962", - "tt0052817", - "tt0100600", - "tt0339343", - "tt7535290", - "tt0218864", - "tt3633118", - "tt7134096", - "tt0060416", - "tt5377164", - "tt0078295", - "tt0087391", - "tt1241325", - "tt2527338", - "tt0144178", - "tt0293467", - "tt7904182", - "tt0080379", - "tt2739792", - "tt6874188", - "tt0156587", - "tt0168264", - "tt5608918", - "tt10720816", - "tt8544498", - "tt11050682", - "tt0108554", - "tt0071859", - "tt2094052", - "tt0047475", - "tt11014432", - "tt0143334", - "tt5116896", - "tt0879223", - "tt12092784", - "tt9310328", - "tt0070570", - "tt3316122", - "tt6098546", - "tt6961856", - "tt4788910", - "tt0029078", - "tt0870958", - "tt1533114", - "tt10590458", - "tt2259360", - "tt0069959", - "tt6512632", - "tt2007387", - "tt1942871", - "tt6911110", - "tt7697348", - "tt0164528", - "tt0809925", - "tt1756773", - "tt8747304", - "tt0317522", - "tt1643240", - "tt1756447", - "tt1782250", - "tt0176326", - "tt5868630", - "tt1943783", - "tt10129040", - "tt11908078", - "tt8288450", - "tt0036836", - "tt11384542", - "tt4202960", - "tt0070374", - "tt0043554", - "tt0112907", - "tt4074384", - "tt1372710", - "tt1249299", - "tt1874451", - "tt0138444", - "tt10044040", - "tt3701460", - "tt11804772", - "tt0453161", - "tt6961624", - "tt0322645", - "tt8026108", - "tt0074381", - "tt4257940", - "tt0445777", - "tt10095266", - "tt11615038", - "tt3140044", - "tt9537888", - "tt9747954", - "tt0080900", - "tt8854392", - "tt10756374", - "tt4674962", - "tt0048352", - "tt0929261", - "tt11922698", - "tt2771206", - "tt11611650", - "tt0105807", - "tt2214981", - "tt7150126", - "tt0314724", - "tt10648440", - "tt8665898", - "tt7119062", - "tt8064418", - "tt0101442", - "tt2246809", - "tt5325012", - "tt1430622", - "tt1241719", - "tt5770566", - "tt0060220", - "tt8816178", - "tt0274560", - "tt0122158", - "tt9418812", - "tt0120121", - "tt7399138", - "tt1818443", - "tt5941796", - "tt3746176", - "tt1282016", - "tt11952720", - "tt3030920", - "tt1295071", - "tt3243774", - "tt0124315", - "tt8186932", - "tt0077964", - "tt0106538", - "tt1941717", - "tt1003023", - "tt2354247", - "tt1606191", - "tt10510654", - "tt0397101", - "tt12144858", - "tt0984130", - "tt0315488", - "tt0070243", - "tt0854667", - "tt1145446", - "tt9111316", - "tt0076555", - "tt7286836", - "tt0105385", - "tt11597152", - "tt6720680", - "tt3884454", - "tt0216312", - "tt11294784", - "tt11563110", - "tt0068837", - "tt1871360", - "tt7737734", - "tt0107468", - "tt0234805", - "tt5542820", - "tt9127820", - "tt7838654", - "tt6116766", - "tt1505143", - "tt0090349", - "tt7779936", - "tt0978797", - "tt6330246", - "tt0346094", - "tt8634576", - "tt7115168", - "tt0847086", - "tt0014694", - "tt1657517", - "tt0194146", - "tt8403168", - "tt10793604", - "tt10126434", - "tt11661552", - "tt1479686", - "tt0144096", - "tt7146812", - "tt0083702", - "tt8289504", - "tt0446755", - "tt9581076", - "tt0019646", - "tt6143798", - "tt0167116", - "tt3233904", - "tt0443567", - "tt5769528", - "tt8430676", - "tt0124836", - "tt1340795", - "tt2551580", - "tt5527000", - "tt0312941", - "tt0377524", - "tt11861072", - "tt6292658", - "tt0102004", - "tt8759834", - "tt0046872", - "tt2420124", - "tt11143286", - "tt10864124", - "tt3455822", - "tt7520672", - "tt6296274", - "tt4340740", - "tt4962796", - "tt3030928", - "tt1927126", - "tt0104942", - "tt7884738", - "tt7997042", - "tt1246723", - "tt5488974", - "tt9651690", - "tt0378848", - "tt0163816", - "tt3748918", - "tt9898858", - "tt0482122", - "tt1603789", - "tt0058991", - "tt10244008", - "tt2309001", - "tt6926356", - "tt10740584", - "tt1631783", - "tt0080796", - "tt0074650", - "tt1674741", - "tt1718765", - "tt0479943", - "tt9684220", - "tt3746820", - "tt0282543", - "tt0313255", - "tt7879442", - "tt0835876", - "tt0051083", - "tt0057574", - "tt8485772", - "tt0070423", - "tt0848542", - "tt8686136", - "tt0796979", - "tt10709062", - "tt1602500", - "tt7755856", - "tt0479880", - "tt0063233", - "tt2350374", - "tt6745550", - "tt12020764", - "tt8244784", - "tt2404385", - "tt5105702", - "tt7335796", - "tt9779516", - "tt0405821", - "tt6439558", - "tt4693840", - "tt1342378", - "tt8391976", - "tt1272025", - "tt7625678", - "tt1327798", - "tt7772582", - "tt5691024", - "tt3804756", - "tt0217074", - "tt1494775", - "tt1587139", - "tt0054614", - "tt0483022", - "tt0448205", - "tt0804485", - "tt6390668", - "tt3458196", - "tt0223154", - "tt0995036", - "tt5717610", - "tt7357210", - "tt6012380", - "tt6612512", - "tt8395052", - "tt10850450", - "tt1730698", - "tt7842256", - "tt5721654", - "tt11823922", - "tt0222396", - "tt3280186", - "tt8360450", - "tt0414924", - "tt2392674", - "tt2372335", - "tt0882969", - "tt0318649", - "tt1122769", - "tt9016016", - "tt10131762", - "tt6969550", - "tt0234217", - "tt8631800", - "tt0034982", - "tt1199552", - "tt0032032", - "tt0390393", - "tt1151921", - "tt1487896", - "tt7120400", - "tt9378216", - "tt6180608", - "tt6610280", - "tt0452011", - "tt12092836", - "tt7764130", - "tt6843538", - "tt1543299", - "tt3037846", - "tt4171032", - "tt2763400", - "tt3065504", - "tt5474644", - "tt4760186", - "tt6958618", - "tt0342167", - "tt11223288", - "tt2326075", - "tt4438098", - "tt10892530", - "tt11708056", - "tt5192640", - "tt1449183", - "tt0399040", - "tt8826812", - "tt2258731", - "tt0231931", - "tt11990802", - "tt10270966", - "tt0284655", - "tt1328865", - "tt11029976", - "tt0444706", - "tt1577061", - "tt8904630", - "tt5138974", - "tt1153102", - "tt11656836", - "tt4620098", - "tt2481202", - "tt4353996", - "tt0856008", - "tt9787524", - "tt9643408", - "tt9358200", - "tt9402676", - "tt11173480", - "tt6850276", - "tt4960930", - "tt11892646", - "tt1471236", - "tt0342420", - "tt6945500", - "tt2521086", - "tt2309770", - "tt11189596", - "tt0070755", - "tt0067052", - "tt0043313", - "tt3717192", - "tt3838802", - "tt2112206", - "tt0479879", - "tt9244638", - "tt0055282", - "tt0447953", - "tt3613084", - "tt0030341", - "tt1524114", - "tt0104088", - "tt7500618", - "tt6509810", - "tt0073703", - "tt6538150", - "tt0377112", - "tt0386669", - "tt2033425", - "tt4515928", - "tt0072085", - "tt0840999", - "tt8413006", - "tt2916682", - "tt0044828", - "tt1977002", - "tt3612514", - "tt8924580", - "tt0099310", - "tt0102562", - "tt0093733", - "tt6782412", - "tt9345754", - "tt3262450", - "tt9214950", - "tt4287586", - "tt7629818", - "tt6264018", - "tt0470737", - "tt0117445", - "tt5868938", - "tt5269710", - "tt0043913", - "tt0057055", - "tt0117716", - "tt0216399", - "tt2063819", - "tt10167262", - "tt5808370", - "tt1243630", - "tt2953304", - "tt7336470", - "tt1361330", - "tt1486843", - "tt8545634", - "tt4201990", - "tt0097354", - "tt9033432", - "tt10120472", - "tt9803152", - "tt11348950", - "tt5105688", - "tt3266266", - "tt8242084", - "tt9147456", - "tt10294052", - "tt0243885", - "tt5462882", - "tt0988043", - "tt9522080", - "tt0343737", - "tt4572682", - "tt0342258", - "tt11152492", - "tt10575718", - "tt4047704", - "tt2305348", - "tt7334158", - "tt7665428", - "tt2367680", - "tt0119423", - "tt7959296", - "tt7516844", - "tt7545266", - "tt9442842", - "tt1137999", - "tt7858400", - "tt7113678", - "tt6413712", - "tt1340569", - "tt3098812", - "tt8324576", - "tt5588938", - "tt0051472", - "tt7531096", - "tt0142239", - "tt0023410", - "tt11033574", - "tt0892074", - "tt1318025", - "tt3733374", - "tt1570966", - "tt9239422", - "tt0804550", - "tt10027696", - "tt3105428", - "tt0082382", - "tt8902948", - "tt7622584", - "tt7177250", - "tt5174992", - "tt6803242", - "tt1942887", - "tt4574440", - "tt0267573", - "tt0427848", - "tt6400476", - "tt2319142", - "tt1095414", - "tt1502397", - "tt6095808", - "tt0144315", - "tt4136162", - "tt6875564", - "tt0342561", - "tt8580466", - "tt1601475", - "tt5657658", - "tt1226752", - "tt4331488", - "tt2220642", - "tt4449516", - "tt11086254", - "tt10886166", - "tt9010802", - "tt9482786", - "tt0055796", - "tt0109400", - "tt0079048", - "tt6131636", - "tt0033491", - "tt1130091", - "tt9261218", - "tt0053578", - "tt7583274", - "tt7579446", - "tt0410520", - "tt11570218", - "tt4044970", - "tt0061409", - "tt6414632", - "tt5571130", - "tt2316810", - "tt0035015", - "tt8951692", - "tt0462069", - "tt1432078", - "tt9285882", - "tt2981410", - "tt8998896", - "tt0151399", - "tt1412367", - "tt0035039", - "tt10133224", - "tt1422191", - "tt0111199", - "tt9056522", - "tt11160666", - "tt7925798", - "tt0005302", - "tt4840810", - "tt1657448", - "tt0074877", - "tt6626486", - "tt0126016", - "tt9185066", - "tt1602474", - "tt0374324", - "tt0114555", - "tt3263230", - "tt4459424", - "tt1235836", - "tt9621284", - "tt11055922", - "tt1029269", - "tt5864254", - "tt0918554", - "tt8633560", - "tt4669252", - "tt1467088", - "tt1051906", - "tt0780577", - "tt6808310", - "tt0101390", - "tt0814331", - "tt1718898", - "tt0165461", - "tt11747672", - "tt8923484", - "tt0410320", - "tt0065646", - "tt8488518", - "tt3154432", - "tt0073887", - "tt0420128", - "tt0035951", - "tt3905450", - "tt4963900", - "tt0108499", - "tt9794870", - "tt0062456", - "tt0420683", - "tt0059884", - "tt10533570", - "tt1843212", - "tt9869578", - "tt4287598", - "tt6793972", - "tt4729322", - "tt2736032", - "tt8775036", - "tt1373215", - "tt3007072", - "tt2314030", - "tt11921696", - "tt9777914", - "tt11844684", - "tt5582566", - "tt8861826", - "tt8686088", - "tt0029350", - "tt6640384", - "tt0878649", - "tt0202880", - "tt0068235", - "tt1151915", - "tt9247926", - "tt1509268", - "tt7395804", - "tt0498097", - "tt4393206", - "tt0043871", - "tt8466726", - "tt0245479", - "tt11987296", - "tt3451320", - "tt5962096", - "tt2207870", - "tt11609344", - "tt10485690", - "tt11810424", - "tt0091428", - "tt10944744", - "tt0045886", - "tt6824050", - "tt10882126", - "tt6794462", - "tt0085835", - "tt8422628", - "tt9048786", - "tt0440712", - "tt3663020", - "tt0441909", - "tt9148706", - "tt0044326", - "tt1065092", - "tt5580130", - "tt0029706", - "tt0293508", - "tt3477064", - "tt0116001", - "tt8058874", - "tt1349640", - "tt0131046", - "tt0116446", - "tt2113679", - "tt3103350", - "tt11952742", - "tt2181969", - "tt0051102", - "tt0147582", - "tt4506208", - "tt4524436", - "tt8299768", - "tt1486192", - "tt0142233", - "tt3229518", - "tt4623902", - "tt8191944", - "tt11277954", - "tt9597922", - "tt6684976", - "tt0415012", - "tt10071352", - "tt5244812", - "tt1094277", - "tt6408738", - "tt0403885", - "tt6338744", - "tt1235059", - "tt0117496", - "tt5442884", - "tt0056444", - "tt9086228", - "tt2132415", - "tt0043559", - "tt2433408", - "tt9617504", - "tt5761986", - "tt1325753", - "tt4106514", - "tt3494610", - "tt6267926", - "tt6672152", - "tt2552684", - "tt4417352", - "tt9399288", - "tt0118766", - "tt9225192", - "tt7906978", - "tt8332454", - "tt12043620", - "tt3111426", - "tt11136726", - "tt4797182", - "tt1255956", - "tt7901350", - "tt5489276", - "tt5572856", - "tt0116147", - "tt0448965", - "tt8060054", - "tt8906652", - "tt3091258", - "tt0841009", - "tt0099506", - "tt0142235", - "tt1142972", - "tt0215545", - "tt8299862", - "tt0086112", - "tt8221736", - "tt0365938", - "tt1320237", - "tt11810418", - "tt8739582", - "tt0827181", - "tt0074626", - "tt0105856", - "tt10674930", - "tt3907102", - "tt5830000", - "tt0339526", - "tt2815772", - "tt1655629", - "tt4759654", - "tt3612246", - "tt2716382", - "tt0846713", - "tt5096470", - "tt7942116", - "tt6657486", - "tt9876418", - "tt1542903", - "tt11686346", - "tt0455474", - "tt2125584", - "tt7587876", - "tt12078990", - "tt5941336", - "tt1646103", - "tt6022266", - "tt11082984", - "tt1023345", - "tt5815016", - "tt0468547", - "tt4286440", - "tt0084033", - "tt8974576", - "tt4581548", - "tt0065889", - "tt0058773", - "tt0395565", - "tt12109074", - "tt0072206", - "tt0475557", - "tt11565362", - "tt0118617", - "tt8363908", - "tt11656094", - "tt0117882", - "tt9612368", - "tt6856396", - "tt6837832", - "tt8750570", - "tt0095827", - "tt0057580", - "tt3418854", - "tt1650048", - "tt1496002", - "tt1964995", - "tt7120602", - "tt0113236", - "tt8009102", - "tt10384744", - "tt5136700", - "tt3115906", - "tt0038369", - "tt0451166", - "tt1756679", - "tt11169980", - "tt0091511", - "tt1451620", - "tt6472742", - "tt0093522", - "tt3274690", - "tt0177636", - "tt0120742", - "tt8661510", - "tt7537216", - "tt0235221", - "tt4195970", - "tt6094970", - "tt1441259", - "tt10463146", - "tt10925166", - "tt5470448", - "tt11692010", - "tt0804540", - "tt2363495", - "tt2925992", - "tt11374034", - "tt7510346", - "tt0365541", - "tt10151496", - "tt11584600", - "tt9208444", - "tt6151048", - "tt5265974", - "tt1800351", - "tt3327918", - "tt1232825", - "tt10145122", - "tt1519640", - "tt10876506", - "tt9026262", - "tt7504726", - "tt4558376", - "tt9617578", - "tt0327850", - "tt1156395", - "tt3824648", - "tt3282664", - "tt6690836", - "tt0103266", - "tt0061084", - "tt8559826", - "tt8406738", - "tt3110634", - "tt0235546", - "tt8591260", - "tt0078224", - "tt1097649", - "tt1371711", - "tt0090248", - "tt0107305", - "tt10345024", - "tt1896767", - "tt0035583", - "tt12036052", - "tt8258074", - "tt3276648", - "tt7638094", - "tt3557730", - "tt0246748", - "tt6247650", - "tt12038270", - "tt7808118", - "tt2134099", - "tt1346516", - "tt5217608", - "tt4270452", - "tt11583568", - "tt0078345", - "tt11447658", - "tt0304328", - "tt5784708", - "tt0338139", - "tt2103997", - "tt8569578", - "tt0098667", - "tt9662980", - "tt8589474", - "tt7373264", - "tt0057527", - "tt3054496", - "tt0118632", - "tt7520274", - "tt1797514", - "tt9889664", - "tt9786512", - "tt2762738", - "tt0305934", - "tt8367814", - "tt8201996", - "tt10937434", - "tt6924682", - "tt2173222", - "tt3737420", - "tt1634106", - "tt1641253", - "tt1937374", - "tt0074853", - "tt4316472", - "tt9580138", - "tt11045776", - "tt0000000", - "tt0044000", - "tt0374330", - "tt7827944", - "tt0102014", - "tt4137924", - "tt3455082", - "tt6271432", - "tt0183869", - "tt12098392", - "tt0188388", - "tt9389612", - "tt7258372", - "tt4907206", - "tt8791752", - "tt6087964", - "tt10619512", - "tt3342658", - "tt9287778", - "tt0066126", - "tt0053225", - "tt11962590", - "tt6344664", - "tt0039634", - "tt9620830", - "tt0431114", - "tt1198405", - "tt7790498", - "tt0052338", - "tt8555248", - "tt1445729", - "tt8956392", - "tt0364457", - "tt6531506", - "tt4033358", - "tt5577494", - "tt8901942", - "tt2637196", - "tt4515456", - "tt9702698", - "tt0479917", - "tt0351759", - "tt0976222", - "tt1202203", - "tt10151054", - "tt2467442", - "tt7204348", - "tt0109263", - "tt0066820", - "tt1133594", - "tt0039204", - "tt0836685", - "tt0452702", - "tt3607532", - "tt8406744", - "tt9769254" -] \ No newline at end of file diff --git a/scraper/scrapers/rarbg/rargb_series_imdb_ids_2020-04-22.json b/scraper/scrapers/rarbg/rargb_series_imdb_ids_2020-04-22.json deleted file mode 100644 index a0cdb45..0000000 --- a/scraper/scrapers/rarbg/rargb_series_imdb_ids_2020-04-22.json +++ /dev/null @@ -1,6305 +0,0 @@ -[ - "tt9047510", - "tt3831508", - "tt9134336", - "tt2286266", - "tt8170404", - "tt6333104", - "tt3138604", - "tt2769458", - "tt2309405", - "tt6958022", - "tt1845887", - "tt5038678", - "tt10810430", - "tt8660874", - "tt0112230", - "tt0408368", - "tt6507028", - "tt5056958", - "tt3667284", - "tt4095622", - "tt5562058", - "tt4360400", - "tt11168116", - "tt9145880", - "tt6009602", - "tt6167962", - "tt8509922", - "tt6083778", - "tt5761152", - "tt0262990", - "tt0058824", - "tt4154858", - "tt0098798", - "tt7599942", - "tt2406026", - "tt4680444", - "tt4770018", - "tt6416260", - "tt5592230", - "tt10715140", - "tt1884907", - "tt4231140", - "tt1249208", - "tt1840051", - "tt4855578", - "tt10087444", - "tt4649390", - "tt5324986", - "tt0118248", - "tt3432424", - "tt8130432", - "tt0063951", - "tt8080054", - "tt5012644", - "tt8461242", - "tt7695916", - "tt5992164", - "tt9181662", - "tt4995052", - "tt10132958", - "tt3369162", - "tt0808099", - "tt5421602", - "tt7335184", - "tt1885102", - "tt7274440", - "tt1845307", - "tt6128254", - "tt9140352", - "tt5742760", - "tt3761278", - "tt2357547", - "tt6150820", - "tt6840134", - "tt0397306", - "tt3793630", - "tt6529388", - "tt3487410", - "tt9315990", - "tt9169800", - "tt0885761", - "tt9426290", - "tt2132641", - "tt3691462", - "tt6842242", - "tt0262985", - "tt1196946", - "tt4124758", - "tt0053479", - "tt10291112", - "tt2580046", - "tt5530706", - "tt3507484", - "tt5580664", - "tt2373856", - "tt7484994", - "tt6438090", - "tt7555294", - "tt9643158", - "tt6467482", - "tt8518136", - "tt3663490", - "tt3577058", - "tt6936928", - "tt9604400", - "tt10698408", - "tt3816666", - "tt2235942", - "tt8332034", - "tt6236572", - "tt0278866", - "tt0238784", - "tt3317064", - "tt10314462", - "tt2883562", - "tt5043530", - "tt2070443", - "tt0075488", - "tt8682948", - "tt6106704", - "tt4179452", - "tt8063866", - "tt7667038", - "tt4673856", - "tt2891574", - "tt5225764", - "tt4683956", - "tt1462059", - "tt0080221", - "tt2719784", - "tt3419604", - "tt8765446", - "tt7370506", - "tt10621514", - "tt8649378", - "tt5960546", - "tt0275137", - "tt3592718", - "tt2195454", - "tt8412178", - "tt9335658", - "tt1590961", - "tt3560094", - "tt9686194", - "tt8708280", - "tt0364828", - "tt10037034", - "tt5336934", - "tt1598754", - "tt1179817", - "tt5754418", - "tt1190634", - "tt2361849", - "tt7895774", - "tt2129304", - "tt2252938", - "tt4705002", - "tt7660850", - "tt1570957", - "tt5638056", - "tt0445890", - "tt7053188", - "tt8986558", - "tt0115101", - "tt0185103", - "tt6917192", - "tt5489746", - "tt1703925", - "tt7520794", - "tt2948562", - "tt8115560", - "tt1760943", - "tt9899340", - "tt5527612", - "tt8415880", - "tt2575968", - "tt8746478", - "tt8341954", - "tt10196418", - "tt6347484", - "tt1743880", - "tt6001964", - "tt0086662", - "tt3428912", - "tt6708260", - "tt5903724", - "tt2736666", - "tt0084967", - "tt8893498", - "tt9640354", - "tt5227038", - "tt0071054", - "tt2261391", - "tt2738038", - "tt8325314", - "tt0108778", - "tt2777876", - "tt4931888", - "tt6383288", - "tt3796080", - "tt9047042", - "tt4573608", - "tt4577556", - "tt3589872", - "tt5176266", - "tt2746736", - "tt7763662", - "tt0129712", - "tt1778108", - "tt2753110", - "tt5351176", - "tt9028816", - "tt0407362", - "tt5761478", - "tt5882386", - "tt0364779", - "tt8295694", - "tt5874596", - "tt3481544", - "tt9855482", - "tt11742152", - "tt4089276", - "tt1545214", - "tt8072678", - "tt7136584", - "tt6112414", - "tt8178650", - "tt0115109", - "tt6015808", - "tt0112178", - "tt5444332", - "tt8134160", - "tt5606154", - "tt2338232", - "tt2216156", - "tt5693604", - "tt8845238", - "tt0310455", - "tt5182866", - "tt7826108", - "tt8806524", - "tt5772346", - "tt1367709", - "tt5296406", - "tt1748888", - "tt8080122", - "tt8792230", - "tt5034326", - "tt8628426", - "tt1079959", - "tt1592287", - "tt6255500", - "tt6503434", - "tt3216682", - "tt5592146", - "tt0417373", - "tt0460681", - "tt3692064", - "tt7423198", - "tt1588224", - "tt3187578", - "tt8589128", - "tt0344651", - "tt1078394", - "tt0106145", - "tt8385496", - "tt2177491", - "tt6297682", - "tt8746434", - "tt3116086", - "tt9246600", - "tt6957316", - "tt10243692", - "tt7260852", - "tt10284122", - "tt6466208", - "tt6682754", - "tt0835010", - "tt5242220", - "tt2514488", - "tt8310612", - "tt5179808", - "tt7178582", - "tt3743822", - "tt6566480", - "tt5830272", - "tt0397442", - "tt2628232", - "tt5674872", - "tt7490342", - "tt2346091", - "tt0108909", - "tt0080196", - "tt6165532", - "tt5232792", - "tt1124373", - "tt11707368", - "tt0429318", - "tt3640276", - "tt0074053", - "tt0149460", - "tt11654094", - "tt0758790", - "tt3782838", - "tt8323670", - "tt10981666", - "tt4589246", - "tt5330088", - "tt4476574", - "tt4475198", - "tt2247314", - "tt2223298", - "tt8871764", - "tt4716268", - "tt6714616", - "tt0870032", - "tt2342652", - "tt4428038", - "tt10329046", - "tt2994108", - "tt3422854", - "tt2301351", - "tt0419336", - "tt4719894", - "tt8159960", - "tt7203552", - "tt7306102", - "tt1225790", - "tt7157494", - "tt2904656", - "tt0070644", - "tt5779222", - "tt2712740", - "tt3893332", - "tt9717424", - "tt7949606", - "tt1734135", - "tt6069204", - "tt3173854", - "tt0375355", - "tt8285216", - "tt1442566", - "tt2131368", - "tt1604099", - "tt5697642", - "tt6461746", - "tt3321642", - "tt6087072", - "tt0338580", - "tt2244077", - "tt8050740", - "tt2575988", - "tt2710104", - "tt1646043", - "tt5834204", - "tt5396572", - "tt2265572", - "tt8760264", - "tt7948268", - "tt3515512", - "tt6304194", - "tt0068093", - "tt5651844", - "tt0319969", - "tt5559366", - "tt5796728", - "tt2524238", - "tt2293002", - "tt2091498", - "tt3496230", - "tt10065678", - "tt2300923", - "tt10482560", - "tt7623616", - "tt4122068", - "tt4118584", - "tt0437729", - "tt2334429", - "tt7956684", - "tt1382367", - "tt7668518", - "tt9251798", - "tt8359610", - "tt8521728", - "tt3986120", - "tt1943276", - "tt2550284", - "tt7942796", - "tt9769678", - "tt2467372", - "tt2815522", - "tt3012540", - "tt3390892", - "tt0965364", - "tt10750498", - "tt4973548", - "tt8598154", - "tt3602046", - "tt4172154", - "tt2768802", - "tt6385418", - "tt1318007", - "tt10768172", - "tt7057260", - "tt4154452", - "tt7156016", - "tt9073722", - "tt1595859", - "tt3514324", - "tt4363588", - "tt4266116", - "tt7368008", - "tt3696720", - "tt1122770", - "tt0859592", - "tt6524350", - "tt5661410", - "tt7838332", - "tt4455862", - "tt3042608", - "tt10417836", - "tt2646334", - "tt9088596", - "tt10662040", - "tt9632280", - "tt3223004", - "tt1697033", - "tt1342711", - "tt0446241", - "tt4445154", - "tt0111932", - "tt5774044", - "tt1443927", - "tt4181172", - "tt9165776", - "tt3215364", - "tt10228032", - "tt6160506", - "tt3917432", - "tt8385152", - "tt1698441", - "tt5113032", - "tt8103530", - "tt1582350", - "tt6261554", - "tt1727434", - "tt0083497", - "tt8001092", - "tt8146760", - "tt7608238", - "tt4633166", - "tt5926494", - "tt6908976", - "tt1091909", - "tt1866609", - "tt1911883", - "tt1399045", - "tt7430684", - "tt6877772", - "tt8467296", - "tt10370736", - "tt1869454", - "tt5729304", - "tt4501242", - "tt8435344", - "tt11091964", - "tt2220150", - "tt5910786", - "tt8179162", - "tt7737404", - "tt2078576", - "tt1593756", - "tt3231534", - "tt7860116", - "tt0058812", - "tt8263746", - "tt5091820", - "tt6616260", - "tt7909970", - "tt0804425", - "tt6882310", - "tt6078644", - "tt7577814", - "tt9424434", - "tt5344280", - "tt3786966", - "tt11214028", - "tt7320300", - "tt6128376", - "tt2194326", - "tt7121854", - "tt10329028", - "tt2312036", - "tt2215399", - "tt1563280", - "tt4913678", - "tt3168804", - "tt5763748", - "tt2017109", - "tt6136842", - "tt7866098", - "tt2931316", - "tt0373732", - "tt9253866", - "tt10341020", - "tt7239256", - "tt6536348", - "tt0287196", - "tt1257544", - "tt1661526", - "tt5290382", - "tt4651824", - "tt6210192", - "tt1825133", - "tt9698480", - "tt4354650", - "tt1898069", - "tt5857720", - "tt4075386", - "tt4321400", - "tt2170584", - "tt1292576", - "tt2189874", - "tt6853528", - "tt8001226", - "tt9062856", - "tt1825122", - "tt3219170", - "tt3444938", - "tt1476894", - "tt0395843", - "tt8001106", - "tt8147076", - "tt3846642", - "tt0314979", - "tt2660734", - "tt0381798", - "tt2296682", - "tt7449708", - "tt2104573", - "tt5687612", - "tt1454824", - "tt7670568", - "tt0092325", - "tt6175984", - "tt0069637", - "tt0827947", - "tt0340477", - "tt6461794", - "tt1571313", - "tt8068916", - "tt3905286", - "tt5359830", - "tt6110648", - "tt2229129", - "tt8304498", - "tt6021284", - "tt0095388", - "tt8387348", - "tt9654086", - "tt0115086", - "tt3230864", - "tt6856484", - "tt5578086", - "tt5706750", - "tt6394320", - "tt5310358", - "tt2215291", - "tt2322158", - "tt9169870", - "tt5674718", - "tt10243628", - "tt0321021", - "tt0460637", - "tt7520780", - "tt0061287", - "tt7737692", - "tt1596356", - "tt8488494", - "tt1973370", - "tt6203010", - "tt2733510", - "tt5209286", - "tt8417308", - "tt2176609", - "tt7343520", - "tt2103085", - "tt5567424", - "tt2480514", - "tt9567342", - "tt2923816", - "tt2197797", - "tt7867522", - "tt3007572", - "tt7927790", - "tt2319283", - "tt2860378", - "tt7087260", - "tt0118401", - "tt5833082", - "tt4474344", - "tt7817300", - "tt5180504", - "tt5075942", - "tt7627802", - "tt2009826", - "tt8026448", - "tt0414731", - "tt7782022", - "tt6845418", - "tt1830888", - "tt11018358", - "tt6102418", - "tt2271773", - "tt4063608", - "tt3205802", - "tt0758722", - "tt8510382", - "tt5000804", - "tt0455275", - "tt0168596", - "tt2152112", - "tt0439879", - "tt8507402", - "tt2449262", - "tt8324422", - "tt2128016", - "tt7406334", - "tt11237508", - "tt9103932", - "tt7949200", - "tt0096557", - "tt5690224", - "tt4057844", - "tt9169656", - "tt7134194", - "tt1632701", - "tt1981538", - "tt0115355", - "tt5221566", - "tt7286488", - "tt7917984", - "tt4397864", - "tt4209752", - "tt9555104", - "tt6276100", - "tt1884856", - "tt8070516", - "tt4584326", - "tt0092312", - "tt1661102", - "tt1020621", - "tt4592682", - "tt0448300", - "tt4494948", - "tt2177489", - "tt1928328", - "tt0976014", - "tt0759364", - "tt2278605", - "tt7194490", - "tt4955642", - "tt5871092", - "tt7050978", - "tt0426741", - "tt6128300", - "tt6170980", - "tt0141842", - "tt5639976", - "tt6583806", - "tt0213338", - "tt11006320", - "tt1358355", - "tt1765085", - "tt2699226", - "tt6176596", - "tt6101624", - "tt10517426", - "tt8689470", - "tt6474236", - "tt4648424", - "tt1830332", - "tt2677216", - "tt7187044", - "tt0096555", - "tt2215717", - "tt10699146", - "tt7165904", - "tt0880557", - "tt7736572", - "tt1415175", - "tt1567215", - "tt8416494", - "tt7107518", - "tt5548612", - "tt3012894", - "tt11102274", - "tt6768146", - "tt0428134", - "tt8923354", - "tt5340782", - "tt2741950", - "tt6407712", - "tt3520612", - "tt6779076", - "tt0042093", - "tt7748314", - "tt2128212", - "tt2295809", - "tt0883772", - "tt5785564", - "tt4915896", - "tt5301958", - "tt8364940", - "tt3219166", - "tt3425318", - "tt3526078", - "tt9310136", - "tt0204113", - "tt3597854", - "tt0805666", - "tt6729080", - "tt2827536", - "tt0086756", - "tt1475582", - "tt5568438", - "tt10098248", - "tt5073676", - "tt6193336", - "tt4488724", - "tt6038584", - "tt6609842", - "tt7747014", - "tt4742700", - "tt3494220", - "tt7146600", - "tt2498968", - "tt3190722", - "tt7036530", - "tt1582461", - "tt6839788", - "tt6715172", - "tt9636800", - "tt1870479", - "tt5637842", - "tt0235918", - "tt6722926", - "tt8064302", - "tt0421460", - "tt4816058", - "tt1528406", - "tt2309295", - "tt3314218", - "tt10370956", - "tt9203042", - "tt2805912", - "tt7293240", - "tt10833696", - "tt10623954", - "tt11592028", - "tt6453018", - "tt1849622", - "tt9845152", - "tt3042566", - "tt6894020", - "tt1239443", - "tt2091762", - "tt0246734", - "tt6587094", - "tt10313176", - "tt10625028", - "tt9425132", - "tt9212616", - "tt9426390", - "tt2400129", - "tt6709974", - "tt6461736", - "tt8292872", - "tt5149506", - "tt5971920", - "tt7068626", - "tt10590068", - "tt2645122", - "tt7365526", - "tt6131120", - "tt10952558", - "tt0098936", - "tt6128262", - "tt1145500", - "tt7909708", - "tt3216586", - "tt10108664", - "tt7085256", - "tt0094582", - "tt9048368", - "tt11058644", - "tt0338653", - "tt3565412", - "tt6012704", - "tt3186138", - "tt10379670", - "tt3713152", - "tt6768634", - "tt3264836", - "tt0448190", - "tt6782014", - "tt10872880", - "tt0111875", - "tt6953640", - "tt10081406", - "tt0458254", - "tt2564734", - "tt2364582", - "tt0217579", - "tt5323988", - "tt7588316", - "tt6809396", - "tt3513388", - "tt5512570", - "tt8359654", - "tt7017362", - "tt1400819", - "tt7230846", - "tt10269664", - "tt4580372", - "tt2428924", - "tt3513704", - "tt4287280", - "tt8452308", - "tt1405406", - "tt3027156", - "tt2245029", - "tt5027982", - "tt0290988", - "tt1854226", - "tt4218618", - "tt4574708", - "tt9303684", - "tt3554098", - "tt5838282", - "tt2266639", - "tt1948830", - "tt7760676", - "tt5321130", - "tt2721686", - "tt4543056", - "tt2211457", - "tt1542981", - "tt5771150", - "tt7106722", - "tt2548418", - "tt4683342", - "tt0875948", - "tt6987788", - "tt6090814", - "tt0227975", - "tt3232262", - "tt7965956", - "tt3921180", - "tt4145054", - "tt2674806", - "tt4074374", - "tt4759792", - "tt6258050", - "tt3342592", - "tt2708560", - "tt5600406", - "tt5136196", - "tt9314996", - "tt3738872", - "tt1310809", - "tt7686128", - "tt5905038", - "tt5171438", - "tt2402807", - "tt3008828", - "tt0390700", - "tt4793190", - "tt7942806", - "tt3696476", - "tt1875337", - "tt1049244", - "tt7936386", - "tt0094525", - "tt3698892", - "tt7230898", - "tt0358856", - "tt2209649", - "tt2518480", - "tt8530456", - "tt2262532", - "tt4767370", - "tt4677846", - "tt4481920", - "tt0410975", - "tt11215112", - "tt4719586", - "tt5174232", - "tt2215797", - "tt9860664", - "tt0169446", - "tt6078096", - "tt5726128", - "tt1593613", - "tt7949218", - "tt6873926", - "tt2699374", - "tt11305092", - "tt9132960", - "tt0120570", - "tt3916394", - "tt7671068", - "tt5117150", - "tt3155320", - "tt1365047", - "tt7410352", - "tt1798274", - "tt0374463", - "tt2234222", - "tt9068472", - "tt8543390", - "tt5696762", - "tt7569724", - "tt0437741", - "tt2211129", - "tt6110318", - "tt1043813", - "tt3501074", - "tt7573024", - "tt2201416", - "tt2006421", - "tt5869202", - "tt5763648", - "tt7904188", - "tt2930604", - "tt5798078", - "tt8201142", - "tt9167798", - "tt5594440", - "tt8343762", - "tt0361217", - "tt4222646", - "tt2167393", - "tt3104722", - "tt5324944", - "tt8107060", - "tt7768166", - "tt5684430", - "tt2113487", - "tt5260248", - "tt0083437", - "tt8319428", - "tt4481248", - "tt1663676", - "tt2006848", - "tt3648438", - "tt2495154", - "tt4523640", - "tt2442494", - "tt4337894", - "tt4189570", - "tt1678749", - "tt4558858", - "tt5248878", - "tt7212136", - "tt1963853", - "tt1842530", - "tt1262401", - "tt4839610", - "tt8322592", - "tt10555728", - "tt10948316", - "tt4445972", - "tt4716230", - "tt2698984", - "tt5189944", - "tt2311643", - "tt8888532", - "tt0098904", - "tt7108906", - "tt1068912", - "tt0086814", - "tt7204366", - "tt5320618", - "tt9564862", - "tt6110624", - "tt5884018", - "tt8558492", - "tt9135436", - "tt2303687", - "tt9322614", - "tt5505576", - "tt7503800", - "tt6463374", - "tt10687620", - "tt1321865", - "tt9316032", - "tt11189494", - "tt5995728", - "tt7379872", - "tt1819545", - "tt0115082", - "tt1830622", - "tt1657260", - "tt5194792", - "tt0115269", - "tt2192539", - "tt5870340", - "tt5715524", - "tt0348894", - "tt2215842", - "tt5533758", - "tt0411008", - "tt10220152", - "tt0463850", - "tt2152894", - "tt10290274", - "tt0149447", - "tt5650650", - "tt6461824", - "tt6079608", - "tt2657242", - "tt5937940", - "tt6155068", - "tt5057130", - "tt2568868", - "tt8295472", - "tt10404664", - "tt10765680", - "tt0096626", - "tt6663688", - "tt6921882", - "tt2166772", - "tt0059982", - "tt7799008", - "tt4197508", - "tt3706642", - "tt1103968", - "tt5531466", - "tt0072500", - "tt7988900", - "tt8103082", - "tt9704568", - "tt2243788", - "tt10687134", - "tt2752854", - "tt4386224", - "tt4380272", - "tt2937900", - "tt7319038", - "tt9341874", - "tt1518723", - "tt2274282", - "tt5545018", - "tt11352740", - "tt4324796", - "tt0364845", - "tt9541430", - "tt10183798", - "tt8045594", - "tt1647292", - "tt1129029", - "tt3339966", - "tt3487382", - "tt2265544", - "tt0275140", - "tt11274284", - "tt6216718", - "tt5313984", - "tt4612950", - "tt4328676", - "tt2378794", - "tt3664430", - "tt3508050", - "tt7288952", - "tt6121710", - "tt3729770", - "tt7829834", - "tt1515193", - "tt0429422", - "tt0360266", - "tt9816090", - "tt8398600", - "tt8242548", - "tt9742974", - "tt1842127", - "tt5562056", - "tt4856322", - "tt10223910", - "tt0892535", - "tt5788792", - "tt6268466", - "tt4670954", - "tt2172103", - "tt2758770", - "tt2820078", - "tt7440732", - "tt0187664", - "tt8685324", - "tt5233284", - "tt0078579", - "tt8571906", - "tt6316900", - "tt1486217", - "tt0284722", - "tt9278186", - "tt5348176", - "tt0387199", - "tt0096542", - "tt6466948", - "tt5775214", - "tt2576360", - "tt10985806", - "tt6162516", - "tt10332528", - "tt0200276", - "tt1082770", - "tt5687624", - "tt1932099", - "tt1796960", - "tt3102732", - "tt10619444", - "tt4833364", - "tt6233916", - "tt2193041", - "tt8009622", - "tt1723760", - "tt6807662", - "tt9108770", - "tt6987966", - "tt5670764", - "tt5193172", - "tt9817298", - "tt2086606", - "tt6483198", - "tt9865126", - "tt7217374", - "tt11497904", - "tt9690010", - "tt8337490", - "tt5104362", - "tt5037914", - "tt4065694", - "tt6474378", - "tt3596174", - "tt6858064", - "tt1307824", - "tt2951514", - "tt5720168", - "tt2009765", - "tt5361394", - "tt9373836", - "tt3038384", - "tt5363918", - "tt0056775", - "tt1329291", - "tt1954347", - "tt3218114", - "tt11006986", - "tt8118934", - "tt4230076", - "tt9788012", - "tt5820022", - "tt6038946", - "tt0813711", - "tt9139220", - "tt7305166", - "tt9278110", - "tt0412175", - "tt8502456", - "tt5347876", - "tt8372660", - "tt9817220", - "tt6415490", - "tt4649322", - "tt9850952", - "tt6433606", - "tt7042814", - "tt1299368", - "tt7517330", - "tt11101698", - "tt2938522", - "tt7350790", - "tt3976068", - "tt3148194", - "tt0234355", - "tt5433062", - "tt4835514", - "tt8888618", - "tt10207464", - "tt2355844", - "tt5620076", - "tt5621544", - "tt3127020", - "tt6959368", - "tt7218390", - "tt4634400", - "tt4877562", - "tt7282674", - "tt0965415", - "tt5936448", - "tt0426697", - "tt5363720", - "tt3868832", - "tt1839481", - "tt3697842", - "tt0475047", - "tt5016074", - "tt0488262", - "tt2224452", - "tt1411598", - "tt7592254", - "tt2212323", - "tt5580540", - "tt6103712", - "tt8877446", - "tt0493378", - "tt7076630", - "tt3400010", - "tt0147746", - "tt5671700", - "tt6467294", - "tt4925366", - "tt8807058", - "tt0098929", - "tt0085111", - "tt0083422", - "tt4093626", - "tt4647692", - "tt5192050", - "tt8593910", - "tt2196296", - "tt6487482", - "tt6432854", - "tt8652642", - "tt5598192", - "tt7959106", - "tt0756509", - "tt0058806", - "tt4460878", - "tt0458284", - "tt1877368", - "tt9588388", - "tt2084685", - "tt3502248", - "tt11569530", - "tt6601082", - "tt7612548", - "tt3460454", - "tt6246232", - "tt4600502", - "tt6866266", - "tt7282970", - "tt7132032", - "tt0212671", - "tt4052886", - "tt4305162", - "tt8009602", - "tt3078774", - "tt6835252", - "tt5565334", - "tt3145422", - "tt7356206", - "tt2362849", - "tt1622696", - "tt2054938", - "tt6394734", - "tt1183865", - "tt0083390", - "tt11833494", - "tt0163936", - "tt5817374", - "tt1878805", - "tt1685473", - "tt5363912", - "tt4354996", - "tt5515410", - "tt2750688", - "tt1877514", - "tt8129446", - "tt1264363", - "tt8358050", - "tt0815420", - "tt4545902", - "tt1078273", - "tt6052190", - "tt11012086", - "tt2163315", - "tt4283680", - "tt6819788", - "tt4205332", - "tt0914387", - "tt2155025", - "tt2243973", - "tt4607112", - "tt1724700", - "tt7167690", - "tt7697062", - "tt0411027", - "tt8651972", - "tt5023972", - "tt4938084", - "tt3597790", - "tt0085099", - "tt9140500", - "tt6619592", - "tt6591468", - "tt5097258", - "tt5516154", - "tt8004628", - "tt4319118", - "tt10207430", - "tt11433292", - "tt1042872", - "tt0496356", - "tt8128344", - "tt7767422", - "tt6772826", - "tt1001558", - "tt3233452", - "tt3620824", - "tt0756573", - "tt6712390", - "tt10276062", - "tt3573194", - "tt4093826", - "tt0287839", - "tt1247637", - "tt0910812", - "tt5458944", - "tt1737565", - "tt6596634", - "tt4428022", - "tt7448858", - "tt7614442", - "tt0787985", - "tt2191991", - "tt1944942", - "tt5912064", - "tt8594220", - "tt7187776", - "tt9552850", - "tt2262912", - "tt6440422", - "tt7366338", - "tt1225901", - "tt10521644", - "tt5858812", - "tt9118930", - "tt7741824", - "tt7138728", - "tt1492966", - "tt2827412", - "tt1199099", - "tt8201434", - "tt0115674", - "tt3177402", - "tt9703198", - "tt7161862", - "tt1608383", - "tt2568204", - "tt1525018", - "tt4902046", - "tt6386436", - "tt1405799", - "tt4422836", - "tt0086759", - "tt3288518", - "tt0284741", - "tt9203078", - "tt0462085", - "tt2203380", - "tt8210820", - "tt5038900", - "tt9478324", - "tt9140392", - "tt7821480", - "tt4215716", - "tt4544930", - "tt2276589", - "tt5210998", - "tt9648804", - "tt9224216", - "tt6898970", - "tt1673441", - "tt4689402", - "tt9550766", - "tt0460619", - "tt0765425", - "tt8434720", - "tt2137109", - "tt8461284", - "tt2787278", - "tt4474750", - "tt7895706", - "tt3224768", - "tt4424650", - "tt8772088", - "tt9358600", - "tt1638319", - "tt1828327", - "tt4383082", - "tt9889960", - "tt1757812", - "tt8451992", - "tt5614844", - "tt9416960", - "tt0290978", - "tt2338096", - "tt2407838", - "tt3654614", - "tt1730755", - "tt5571102", - "tt4502154", - "tt7985540", - "tt0830165", - "tt6370626", - "tt1812523", - "tt6675542", - "tt5717906", - "tt2281375", - "tt5111414", - "tt5066212", - "tt8022978", - "tt1836195", - "tt9799150", - "tt1587390", - "tt0078678", - "tt1357604", - "tt4354042", - "tt1361787", - "tt5881896", - "tt4270458", - "tt10609888", - "tt0397501", - "tt4428372", - "tt10971532", - "tt6837396", - "tt2170687", - "tt5536400", - "tt7476594", - "tt6333098", - "tt10313066", - "tt5990096", - "tt10234362", - "tt7143388", - "tt4548554", - "tt7018644", - "tt0199257", - "tt1438437", - "tt7768848", - "tt5769588", - "tt3496994", - "tt7820906", - "tt10487072", - "tt5261756", - "tt8314920", - "tt9170386", - "tt5916218", - "tt8447746", - "tt0079844", - "tt10302548", - "tt7949204", - "tt2107314", - "tt2298264", - "tt3501016", - "tt6987476", - "tt2094262", - "tt9548022", - "tt9362790", - "tt5543284", - "tt1703874", - "tt4800624", - "tt6950466", - "tt6010920", - "tt6620620", - "tt1832045", - "tt5292052", - "tt6816530", - "tt2657258", - "tt11193892", - "tt8341266", - "tt5866284", - "tt0108783", - "tt6174224", - "tt2298477", - "tt0772145", - "tt2083423", - "tt10385670", - "tt9304186", - "tt5793034", - "tt3609352", - "tt7371896", - "tt6664638", - "tt3027506", - "tt5372890", - "tt10028418", - "tt5531470", - "tt7598448", - "tt4766568", - "tt5760392", - "tt11822994", - "tt9435662", - "tt0278238", - "tt1146333", - "tt5144776", - "tt0081874", - "tt8106552", - "tt7124372", - "tt5589658", - "tt5591136", - "tt2963070", - "tt6064676", - "tt0103477", - "tt0159186", - "tt3363346", - "tt8461164", - "tt4277922", - "tt5444412", - "tt3231286", - "tt4930646", - "tt8633518", - "tt6121356", - "tt5117058", - "tt2879390", - "tt4577466", - "tt9134194", - "tt0374455", - "tt3729784", - "tt3772506", - "tt4707050", - "tt2592094", - "tt8038720", - "tt6845420", - "tt4272442", - "tt1722512", - "tt0807686", - "tt5114356", - "tt5056196", - "tt0478942", - "tt2543796", - "tt6859806", - "tt3959576", - "tt1583638", - "tt3747574", - "tt1740718", - "tt1821220", - "tt8139862", - "tt8879940", - "tt7401768", - "tt6315640", - "tt1866570", - "tt5821234", - "tt10368596", - "tt4129004", - "tt3636060", - "tt6028632", - "tt4286252", - "tt6946848", - "tt1929678", - "tt0482870", - "tt5112130", - "tt7371666", - "tt10477884", - "tt5900164", - "tt1542800", - "tt5255584", - "tt7610720", - "tt4424318", - "tt9897038", - "tt1621748", - "tt8098956", - "tt0318997", - "tt6258718", - "tt0874936", - "tt6723402", - "tt10394800", - "tt3560084", - "tt2314952", - "tt10050752", - "tt8092942", - "tt5846856", - "tt8362844", - "tt8510328", - "tt3498622", - "tt7403736", - "tt6264286", - "tt4181268", - "tt8050764", - "tt10553806", - "tt7660730", - "tt6225166", - "tt4299972", - "tt10970268", - "tt6961868", - "tt2400736", - "tt9854774", - "tt7534328", - "tt1699440", - "tt4991910", - "tt8593252", - "tt5712314", - "tt1020913", - "tt2087571", - "tt4622776", - "tt2521668", - "tt10062652", - "tt2661044", - "tt0472027", - "tt8558784", - "tt4669522", - "tt1714425", - "tt9073520", - "tt0086770", - "tt0985344", - "tt6091694", - "tt1837855", - "tt0098825", - "tt1850458", - "tt1548850", - "tt6716256", - "tt0799870", - "tt6423184", - "tt0072589", - "tt5905202", - "tt8300932", - "tt8594276", - "tt5468694", - "tt8164794", - "tt0052520", - "tt10477990", - "tt2189461", - "tt6904118", - "tt2716758", - "tt3289378", - "tt8985210", - "tt7644916", - "tt3672590", - "tt2277728", - "tt6003016", - "tt10855726", - "tt2378536", - "tt10441918", - "tt3868860", - "tt2525840", - "tt4566672", - "tt9272514", - "tt0071075", - "tt4117328", - "tt2429840", - "tt2188671", - "tt3236954", - "tt6639066", - "tt8043492", - "tt0068098", - "tt5180734", - "tt6431066", - "tt5807122", - "tt3597470", - "tt4686698", - "tt5097050", - "tt1389371", - "tt8004578", - "tt2222352", - "tt7278232", - "tt8115702", - "tt0412142", - "tt2581458", - "tt0481452", - "tt5467814", - "tt10406826", - "tt3465008", - "tt2390003", - "tt7948998", - "tt1870792", - "tt0423652", - "tt1191056", - "tt7845798", - "tt3042086", - "tt2838492", - "tt6845390", - "tt11540538", - "tt1935298", - "tt0051305", - "tt1705814", - "tt3046010", - "tt3468798", - "tt7643056", - "tt5061384", - "tt0088727", - "tt6118426", - "tt2193053", - "tt5994364", - "tt8001752", - "tt11313054", - "tt0207275", - "tt8688814", - "tt0310460", - "tt8462276", - "tt11824218", - "tt11327454", - "tt9816064", - "tt1710177", - "tt5603140", - "tt3463426", - "tt6905458", - "tt7893262", - "tt3872824", - "tt2255443", - "tt7768346", - "tt2392976", - "tt4419214", - "tt2805096", - "tt11426660", - "tt0229118", - "tt0386676", - "tt9134228", - "tt0081834", - "tt8045690", - "tt0057751", - "tt4718304", - "tt10826064", - "tt4975856", - "tt6416254", - "tt5784958", - "tt7557336", - "tt10732794", - "tt1411254", - "tt4895394", - "tt4651812", - "tt4648556", - "tt5770788", - "tt7921292", - "tt8550800", - "tt1784288", - "tt2708480", - "tt1512813", - "tt3340712", - "tt4496482", - "tt7945720", - "tt0118437", - "tt2490030", - "tt3280150", - "tt10393806", - "tt0158552", - "tt0270118", - "tt6374028", - "tt2394427", - "tt3410350", - "tt8205078", - "tt0160523", - "tt10056648", - "tt6021364", - "tt0098820", - "tt4148744", - "tt2510740", - "tt8987918", - "tt8606894", - "tt6932170", - "tt10038828", - "tt3804114", - "tt10150924", - "tt0206512", - "tt4792480", - "tt4873020", - "tt3186130", - "tt8537104", - "tt5965978", - "tt10833132", - "tt7137906", - "tt6423062", - "tt0062573", - "tt9117882", - "tt7558018", - "tt8363040", - "tt0159847", - "tt1785123", - "tt3508674", - "tt2460420", - "tt4214468", - "tt7725538", - "tt11280636", - "tt5810626", - "tt1219024", - "tt4906064", - "tt10468676", - "tt4397438", - "tt3776412", - "tt1999525", - "tt8130392", - "tt4659174", - "tt5580146", - "tt5025852", - "tt8390342", - "tt1442449", - "tt1441109", - "tt6109562", - "tt0115285", - "tt1843894", - "tt4872768", - "tt6005368", - "tt7728344", - "tt8690890", - "tt6491416", - "tt3973768", - "tt1429449", - "tt8381430", - "tt8041378", - "tt4513868", - "tt1831575", - "tt9134666", - "tt3556944", - "tt8528256", - "tt4465368", - "tt3476576", - "tt7725756", - "tt2207986", - "tt5462720", - "tt11416026", - "tt2431438", - "tt3186162", - "tt1397131", - "tt1839578", - "tt4543708", - "tt3581932", - "tt10558940", - "tt7186126", - "tt7748122", - "tt7197684", - "tt7603552", - "tt1986770", - "tt4355258", - "tt8050586", - "tt2787218", - "tt5906924", - "tt5596468", - "tt3551096", - "tt1721323", - "tt5507340", - "tt4295320", - "tt6473344", - "tt0130414", - "tt3924304", - "tt1492030", - "tt1416765", - "tt1600194", - "tt3629970", - "tt1844923", - "tt7510930", - "tt6656238", - "tt7588054", - "tt3673794", - "tt5835034", - "tt0813715", - "tt0149314", - "tt4719786", - "tt5118450", - "tt4428124", - "tt4543594", - "tt6970700", - "tt4853930", - "tt3610926", - "tt7772602", - "tt1397243", - "tt10801274", - "tt0457146", - "tt6057002", - "tt11137150", - "tt3066242", - "tt3747572", - "tt1464482", - "tt0437005", - "tt4892108", - "tt1332653", - "tt0892700", - "tt9111220", - "tt3713588", - "tt4167914", - "tt2058303", - "tt0260618", - "tt5641200", - "tt8687584", - "tt3469050", - "tt9049820", - "tt0907833", - "tt10918718", - "tt10323338", - "tt2429872", - "tt5491994", - "tt0964941", - "tt2401919", - "tt3596176", - "tt11151704", - "tt9169598", - "tt7140750", - "tt9165462", - "tt6931486", - "tt4118110", - "tt3183264", - "tt2431738", - "tt9731222", - "tt0802821", - "tt5361346", - "tt7949730", - "tt2435216", - "tt1553656", - "tt10050778", - "tt1596561", - "tt9214692", - "tt3062788", - "tt3604232", - "tt5867464", - "tt5501118", - "tt8096690", - "tt4074084", - "tt5564786", - "tt7141150", - "tt0805663", - "tt3566726", - "tt8708736", - "tt5637742", - "tt2737290", - "tt8908110", - "tt0162065", - "tt7456722", - "tt5937754", - "tt6950510", - "tt6257298", - "tt10193046", - "tt5574940", - "tt2396135", - "tt9307028", - "tt9125810", - "tt7252092", - "tt6821540", - "tt2092588", - "tt6742610", - "tt0247729", - "tt8349896", - "tt0083461", - "tt6445112", - "tt4694268", - "tt3882018", - "tt7875628", - "tt5209238", - "tt8972462", - "tt2076566", - "tt6474174", - "tt0077031", - "tt1877005", - "tt3205334", - "tt7712606", - "tt0795129", - "tt1422378", - "tt7482462", - "tt0896527", - "tt7049682", - "tt5917368", - "tt1832979", - "tt0955322", - "tt5881326", - "tt4816626", - "tt1811179", - "tt6959064", - "tt3107288", - "tt2734804", - "tt2372182", - "tt7949244", - "tt1048176", - "tt4719730", - "tt3723820", - "tt4131818", - "tt7467436", - "tt5806964", - "tt3593432", - "tt5170828", - "tt4000676", - "tt4167960", - "tt5520392", - "tt3311582", - "tt0433309", - "tt0163482", - "tt8440450", - "tt3325692", - "tt3169618", - "tt4192786", - "tt1949012", - "tt0095242", - "tt10242848", - "tt6903222", - "tt2528254", - "tt5607976", - "tt4649420", - "tt7349602", - "tt4452688", - "tt2836308", - "tt8220344", - "tt9740998", - "tt5219042", - "tt0778908", - "tt5782486", - "tt3595002", - "tt10305410", - "tt10837476", - "tt3647998", - "tt5127574", - "tt0862614", - "tt1238834", - "tt7547518", - "tt0106080", - "tt0247082", - "tt0279077", - "tt4506998", - "tt10196390", - "tt2534176", - "tt2576046", - "tt1888075", - "tt11152058", - "tt6846982", - "tt2510616", - "tt6785194", - "tt2978518", - "tt3914672", - "tt5099020", - "tt10518856", - "tt6833398", - "tt5770786", - "tt3233442", - "tt2492366", - "tt2772104", - "tt1192169", - "tt4304864", - "tt6163138", - "tt3681794", - "tt2805126", - "tt2402500", - "tt0285335", - "tt9047526", - "tt4424726", - "tt0083399", - "tt8848336", - "tt3053694", - "tt0138967", - "tt5897304", - "tt5302168", - "tt6599482", - "tt0096684", - "tt0369179", - "tt10257404", - "tt3319538", - "tt0435995", - "tt0450920", - "tt2049323", - "tt0105946", - "tt2814800", - "tt5841090", - "tt06675556", - "tt9318588", - "tt0415407", - "tt2232602", - "tt6244192", - "tt10681222", - "tt3815412", - "tt5154068", - "tt2939262", - "tt5428494", - "tt7861612", - "tt4945574", - "tt4719756", - "tt6402362", - "tt6274614", - "tt6710836", - "tt10613532", - "tt1197567", - "tt1758429", - "tt1178180", - "tt7529770", - "tt7821556", - "tt8925088", - "tt6536550", - "tt9129466", - "tt3489184", - "tt3434378", - "tt1355237", - "tt7643900", - "tt1707374", - "tt6974706", - "tt8704178", - "tt1083163", - "tt6416278", - "tt4863504", - "tt0805669", - "tt4911806", - "tt0105604", - "tt4524424", - "tt0287192", - "tt3006802", - "tt2786956", - "tt4534390", - "tt1103973", - "tt1660055", - "tt8006786", - "tt8683790", - "tt1469154", - "tt0914376", - "tt5848038", - "tt7369770", - "tt2406376", - "tt7244118", - "tt3839822", - "tt0118421", - "tt4866982", - "tt11053272", - "tt10999880", - "tt1748277", - "tt10833692", - "tt10306310", - "tt1358522", - "tt3656138", - "tt0066626", - "tt2968404", - "tt7507476", - "tt9731254", - "tt5989844", - "tt6410708", - "tt9196244", - "tt1688606", - "tt2570312", - "tt4380324", - "tt1430509", - "tt5178604", - "tt7249258", - "tt5011296", - "tt8263750", - "tt4906050", - "tt11629570", - "tt4034398", - "tt1829891", - "tt0146386", - "tt9584024", - "tt4269716", - "tt3781670", - "tt10098458", - "tt0115167", - "tt1362673", - "tt10619404", - "tt8500086", - "tt10403090", - "tt0413559", - "tt7885006", - "tt7053920", - "tt6865906", - "tt7552590", - "tt5750932", - "tt2712516", - "tt5582392", - "tt5688730", - "tt3665674", - "tt5507896", - "tt2715870", - "tt2262456", - "tt2104664", - "tt3495652", - "tt7493428", - "tt5618256", - "tt4687880", - "tt7596008", - "tt5057932", - "tt0461727", - "tt10738670", - "tt4711184", - "tt7904158", - "tt2231098", - "tt5788812", - "tt6048644", - "tt5839454", - "tt0809497", - "tt4443988", - "tt6635810", - "tt6913880", - "tt5337038", - "tt8676618", - "tt1745588", - "tt10714776", - "tt1885777", - "tt2560140", - "tt6586318", - "tt7798714", - "tt0176095", - "tt1865740", - "tt3752644", - "tt5191110", - "tt9153270", - "tt6482686", - "tt2396275", - "tt9419282", - "tt0068120", - "tt8633266", - "tt1569544", - "tt1730535", - "tt4561950", - "tt1998816", - "tt10333258", - "tt2746854", - "tt3552166", - "tt4248510", - "tt1610527", - "tt7962984", - "tt5228026", - "tt2053193", - "tt5541030", - "tt2886812", - "tt7740624", - "tt0338616", - "tt1748835", - "tt1492179", - "tt6077258", - "tt1135300", - "tt5635832", - "tt0965404", - "tt1442437", - "tt2789534", - "tt10329024", - "tt0305056", - "tt10343752", - "tt5571524", - "tt6690134", - "tt0296328", - "tt4307902", - "tt6998202", - "tt1319735", - "tt3574652", - "tt11542920", - "tt6749344", - "tt1641349", - "tt9199798", - "tt1807859", - "tt5711280", - "tt6416270", - "tt11534192", - "tt3946492", - "tt6845422", - "tt1827163", - "tt0852863", - "tt7494116", - "tt10795278", - "tt2729716", - "tt1718536", - "tt3829868", - "tt7558708", - "tt0088595", - "tt0784896", - "tt1178618", - "tt4337944", - "tt0213334", - "tt0417299", - "tt0279600", - "tt7752136", - "tt0485301", - "tt8200550", - "tt0165598", - "tt0782374", - "tt2700678", - "tt1260995", - "tt0241383", - "tt6076336", - "tt4229954", - "tt10253244", - "tt8718438", - "tt7067624", - "tt8425310", - "tt0979627", - "tt4680240", - "tt4341500", - "tt11475228", - "tt3681610", - "tt4645614", - "tt0075520", - "tt5743796", - "tt5014882", - "tt5361834", - "tt5200372", - "tt6830318", - "tt11561206", - "tt5982906", - "tt0112112", - "tt0436992", - "tt0936453", - "tt0230534", - "tt4422950", - "tt5223578", - "tt0080274", - "tt7318880", - "tt7531564", - "tt0083395", - "tt5247052", - "tt2983222", - "tt2010090", - "tt6400730", - "tt6762348", - "tt2783314", - "tt4228802", - "tt0108981", - "tt8082124", - "tt1666278", - "tt0092379", - "tt7722262", - "tt5194802", - "tt0446809", - "tt7610744", - "tt4898282", - "tt9647226", - "tt5021206", - "tt1307789", - "tt3597060", - "tt2148200", - "tt0472989", - "tt4067382", - "tt7425366", - "tt7297802", - "tt1215482", - "tt4458594", - "tt2397255", - "tt5865598", - "tt3230854", - "tt6271042", - "tt4110246", - "tt5226698", - "tt6794990", - "tt8465938", - "tt3530232", - "tt8194716", - "tt10370958", - "tt10613832", - "tt6920400", - "tt8808802", - "tt2879552", - "tt0434676", - "tt9233388", - "tt9448468", - "tt7387350", - "tt6492236", - "tt10122594", - "tt4431276", - "tt3450150", - "tt0173587", - "tt8320894", - "tt3549436", - "tt1641247", - "tt9845250", - "tt8845260", - "tt6244108", - "tt8358938", - "tt0103520", - "tt10732150", - "tt8101768", - "tt5093452", - "tt3098942", - "tt2892016", - "tt5425186", - "tt3220976", - "tt6954882", - "tt6965802", - "tt4122348", - "tt2345481", - "tt4367186", - "tt3560060", - "tt5725682", - "tt1352077", - "tt0135659", - "tt8773080", - "tt5310130", - "tt0483603", - "tt6329316", - "tt0096708", - "tt6870990", - "tt5586974", - "tt3010520", - "tt2089467", - "tt11122508", - "tt8819290", - "tt2290339", - "tt0772137", - "tt0460665", - "tt9278162", - "tt6903284", - "tt7914168", - "tt2558816", - "tt4320258", - "tt1212452", - "tt5444526", - "tt3221268", - "tt7755494", - "tt10698546", - "tt8893554", - "tt11766280", - "tt1334573", - "tt4507442", - "tt6932244", - "tt6021260", - "tt1095213", - "tt10359446", - "tt11179888", - "tt9148598", - "tt6905468", - "tt8679236", - "tt6719962", - "tt9813324", - "tt5637544", - "tt2554946", - "tt4905966", - "tt5511512", - "tt1188927", - "tt3737220", - "tt3701166", - "tt1741256", - "tt10473306", - "tt4998212", - "tt7138426", - "tt2372162", - "tt1593823", - "tt5462364", - "tt0092359", - "tt5164196", - "tt3969754", - "tt3778478", - "tt1738340", - "tt10497010", - "tt6139972", - "tt3150144", - "tt1000734", - "tt2750182", - "tt1820166", - "tt4695530", - "tt9663644", - "tt5868826", - "tt2515462", - "tt10192576", - "tt1702042", - "tt2375858", - "tt6498784", - "tt6561400", - "tt0362359", - "tt7115722", - "tt2886708", - "tt8819906", - "tt6648846", - "tt10133226", - "tt4273282", - "tt7804186", - "tt6311972", - "tt3205236", - "tt0094514", - "tt3594982", - "tt2270708", - "tt1717499", - "tt3098856", - "tt6846846", - "tt8036272", - "tt7369974", - "tt5730352", - "tt6780072", - "tt3729144", - "tt3600266", - "tt7871966", - "tt2239949", - "tt2751064", - "tt9708598", - "tt5038858", - "tt4919930", - "tt7535458", - "tt6622316", - "tt6623510", - "tt5366240", - "tt1749004", - "tt3038578", - "tt6528874", - "tt7095194", - "tt6231504", - "tt5350276", - "tt2202488", - "tt10613514", - "tt8845076", - "tt7446914", - "tt2675934", - "tt0348913", - "tt8793210", - "tt9454910", - "tt0783322", - "tt5817158", - "tt1441096", - "tt6534666", - "tt3908868", - "tt5035202", - "tt9376934", - "tt7411444", - "tt5324116", - "tt1967685", - "tt2857312", - "tt6763664", - "tt6963428", - "tt9073898", - "tt1245695", - "tt9165404", - "tt3285626", - "tt3116986", - "tt3088238", - "tt2384799", - "tt5214068", - "tt1991410", - "tt4475060", - "tt5189220", - "tt5759196", - "tt8804656", - "tt4817296", - "tt4592154", - "tt0094416", - "tt3323254", - "tt0098769", - "tt5771332", - "tt4923028", - "tt3485248", - "tt1943524", - "tt5909930", - "tt1747551", - "tt0279550", - "tt6611916", - "tt2113599", - "tt1600757", - "tt5295524", - "tt0443370", - "tt4160920", - "tt6889090", - "tt8050736", - "tt9805708", - "tt8598266", - "tt1463395", - "tt3544556", - "tt3576794", - "tt2189221", - "tt1000955", - "tt8169088", - "tt9863788", - "tt2545498", - "tt5052460", - "tt0983514", - "tt5866048", - "tt6495756", - "tt1299365", - "tt2983796", - "tt5841196", - "tt8972296", - "tt7716606", - "tt1984119", - "tt7562112", - "tt6710612", - "tt7230406", - "tt0059972", - "tt2666270", - "tt9332962", - "tt8888522", - "tt4903406", - "tt7829456", - "tt6439562", - "tt11307176", - "tt11215130", - "tt4354616", - "tt2931524", - "tt2814102", - "tt2244495", - "tt10165608", - "tt8103070", - "tt7639280", - "tt7235466", - "tt6283584", - "tt9316078", - "tt3159736", - "tt5754602", - "tt6254644", - "tt3484406", - "tt2928960", - "tt7661046", - "tt6500572", - "tt2711738", - "tt4861760", - "tt2356777", - "tt5698216", - "tt1819022", - "tt8755712", - "tt0047708", - "tt8858472", - "tt4588068", - "tt7945066", - "tt3709366", - "tt8373190", - "tt3002170", - "tt2402129", - "tt4798814", - "tt1270367", - "tt1474684", - "tt2177877", - "tt8263822", - "tt0103442", - "tt5808318", - "tt2799012", - "tt6548228", - "tt0086798", - "tt9179616", - "tt11600174", - "tt2699128", - "tt6874206", - "tt8425532", - "tt7491982", - "tt7104930", - "tt5512420", - "tt6906110", - "tt2312134", - "tt7847232", - "tt9281190", - "tt7465722", - "tt1321805", - "tt1666205", - "tt5923012", - "tt8876290", - "tt1243815", - "tt5715116", - "tt3787402", - "tt6613768", - "tt0094481", - "tt7543466", - "tt5612722", - "tt0288937", - "tt5305668", - "tt2169245", - "tt2935974", - "tt0303461", - "tt0796264", - "tt1568202", - "tt2245937", - "tt4362342", - "tt11168104", - "tt5809140", - "tt5833846", - "tt3322312", - "tt4906830", - "tt8680560", - "tt6238876", - "tt6970710", - "tt8709928", - "tt6792200", - "tt6497076", - "tt2649356", - "tt1195935", - "tt0496424", - "tt3973820", - "tt0775372", - "tt0112197", - "tt3480830", - "tt3762198", - "tt3454468", - "tt2788282", - "tt3811218", - "tt3431720", - "tt8912384", - "tt7453996", - "tt5807292", - "tt3530726", - "tt4903026", - "tt4206804", - "tt11261994", - "tt5435008", - "tt0805661", - "tt4655474", - "tt4761054", - "tt1596786", - "tt8878996", - "tt0138785", - "tt0057730", - "tt3543072", - "tt7131720", - "tt7218736", - "tt2707504", - "tt9606838", - "tt6834020", - "tt1921712", - "tt4113078", - "tt5881634", - "tt1476750", - "tt6257970", - "tt0809488", - "tt4633680", - "tt4110062", - "tt0758789", - "tt3559124", - "tt2359704", - "tt4971144", - "tt6211586", - "tt7686456", - "tt4168986", - "tt5962190", - "tt0801425", - "tt0062565", - "tt5797772", - "tt0071042", - "tt1971245", - "tt1874066", - "tt9397442", - "tt10344022", - "tt10686814", - "tt5223426", - "tt3799566", - "tt5491846", - "tt0086687", - "tt7939774", - "tt9817218", - "tt4786132", - "tt4447390", - "tt8263804", - "tt7352676", - "tt8946436", - "tt4955480", - "tt5178792", - "tt2647586", - "tt1886866", - "tt5819414", - "tt3973808", - "tt3727822", - "tt2800234", - "tt4361124", - "tt0169414", - "tt4554780", - "tt5480646", - "tt5583512", - "tt1399664", - "tt5672484", - "tt1767256", - "tt3597912", - "tt1073507", - "tt0233044", - "tt4192812", - "tt6874502", - "tt0866442", - "tt11610268", - "tt0402471", - "tt1312171", - "tt2330327", - "tt2955402", - "tt3398228", - "tt0244365", - "tt4051832", - "tt0785036", - "tt3595806", - "tt5194866", - "tt0460649", - "tt6144174", - "tt2699110", - "tt8272292", - "tt4838586", - "tt0423776", - "tt4858114", - "tt7902072", - "tt6410184", - "tt3205302", - "tt0098924", - "tt2963254", - "tt4718676", - "tt7895046", - "tt3597606", - "tt0106156", - "tt0297494", - "tt3485904", - "tt3078602", - "tt2249364", - "tt1000022", - "tt7318382", - "tt5647076", - "tt4363582", - "tt9460582", - "tt2191613", - "tt3741346", - "tt6428144", - "tt6249134", - "tt1307510", - "tt0346293", - "tt4306696", - "tt9883888", - "tt1267227", - "tt5470756", - "tt5345490", - "tt4384086", - "tt1797404", - "tt7704512", - "tt3502470", - "tt4358188", - "tt0096579", - "tt2647548", - "tt7804132", - "tt7482186", - "tt8991526", - "tt5540054", - "tt0355987", - "tt8241514", - "tt10127422", - "tt5327216", - "tt3907516", - "tt0368530", - "tt9466990", - "tt5402696", - "tt4898002", - "tt4902964", - "tt8164086", - "tt5475704", - "tt1492088", - "tt5674704", - "tt10145110", - "tt2328067", - "tt0318871", - "tt0115227", - "tt2492296", - "tt5197820", - "tt7808608", - "tt2006374", - "tt8629150", - "tt0255734", - "tt10845908", - "tt0176385", - "tt2281583", - "tt1538145", - "tt0058796", - "tt7555554", - "tt7736544", - "tt0329824", - "tt1319260", - "tt5016662", - "tt7765404", - "tt7531644", - "tt4946972", - "tt5178678", - "tt5917372", - "tt4539954", - "tt6588218", - "tt2141913", - "tt1967678", - "tt2939122", - "tt0157246", - "tt7119536", - "tt8164448", - "tt4939950", - "tt4827774", - "tt0313043", - "tt1637574", - "tt3824018", - "tt0383126", - "tt6038226", - "tt11498422", - "tt6459424", - "tt1978355", - "tt2458640", - "tt8201656", - "tt3839758", - "tt5612192", - "tt9145476", - "tt4199038", - "tt6056090", - "tt4944090", - "tt1973692", - "tt5755206", - "tt4159604", - "tt6133034", - "tt6040412", - "tt4288182", - "tt2069270", - "tt6075002", - "tt9000424", - "tt2128103", - "tt4417412", - "tt2874692", - "tt7808370", - "tt0370053", - "tt7280804", - "tt2582590", - "tt9131136", - "tt1069207", - "tt1307224", - "tt0437043", - "tt3891014", - "tt1641384", - "tt4145760", - "tt0460091", - "tt1442065", - "tt0062568", - "tt8635860", - "tt9348716", - "tt5730328", - "tt1439629", - "tt0088621", - "tt3309014", - "tt8792866", - "tt1720601", - "tt10936342", - "tt2709190", - "tt4797212", - "tt10882950", - "tt9780390", - "tt9433014", - "tt4176370", - "tt4954728", - "tt8888168", - "tt11243536", - "tt4295140", - "tt1561755", - "tt6036728", - "tt0115147", - "tt0446847", - "tt2678354", - "tt1655078", - "tt6142940", - "tt1839497", - "tt8305372", - "tt4326894", - "tt0363307", - "tt5651762", - "tt9679542", - "tt2395482", - "tt7958782", - "tt1140100", - "tt6905756", - "tt4834206", - "tt2498076", - "tt4600360", - "tt1637756", - "tt6181672", - "tt0318883", - "tt4718570", - "tt7043380", - "tt2794380", - "tt2094220", - "tt4116046", - "tt5083928", - "tt1597420", - "tt1470837", - "tt8367694", - "tt6495880", - "tt0118254", - "tt1480684", - "tt8680006", - "tt8146754", - "tt6416330", - "tt6337766", - "tt1684397", - "tt4532368", - "tt6923968", - "tt10485750", - "tt0373474", - "tt2980734", - "tt8002604", - "tt2475150", - "tt5860892", - "tt10968530", - "tt0362357", - "tt6441720", - "tt0396991", - "tt1837654", - "tt0835434", - "tt0167743", - "tt2653692", - "tt3598030", - "tt5957066", - "tt2365269", - "tt0133318", - "tt8358976", - "tt4515676", - "tt6461706", - "tt7833530", - "tt4604612", - "tt7210448", - "tt1436544", - "tt6416310", - "tt5839960", - "tt9654080", - "tt1637727", - "tt1222663", - "tt0198190", - "tt0098492", - "tt11337810", - "tt7721046", - "tt8451638", - "tt1772493", - "tt10327440", - "tt1756988", - "tt7924812", - "tt1933854", - "tt4150884", - "tt6681426", - "tt9397640", - "tt0115083", - "tt3143398", - "tt4903514", - "tt3831402", - "tt8129450", - "tt3984348", - "tt5195338", - "tt9068332", - "tt8693362", - "tt6516076", - "tt4254242", - "tt0101205", - "tt6938394", - "tt4191478", - "tt4016454", - "tt9533596", - "tt2186101", - "tt10155470", - "tt5542294", - "tt6348126", - "tt1699208", - "tt0096639", - "tt2505072", - "tt5761496", - "tt2862164", - "tt4312400", - "tt5607658", - "tt0284712", - "tt2074621", - "tt6443078", - "tt1652216", - "tt6463886", - "tt5347906", - "tt8141458", - "tt9324726", - "tt1258216", - "tt2443340", - "tt1985443", - "tt2226397", - "tt7703440", - "tt5940390", - "tt10813648", - "tt2980696", - "tt0421459", - "tt1657505", - "tt1013873", - "tt3579018", - "tt5676590", - "tt1333050", - "tt0118460", - "tt0434672", - "tt1453159", - "tt2889186", - "tt10327294", - "tt1340758", - "tt1422182", - "tt7211840", - "tt1650552", - "tt7892738", - "tt1319636", - "tt10334498", - "tt1618371", - "tt0083501", - "tt4918098", - "tt4189492", - "tt4790548", - "tt1715258", - "tt0397194", - "tt7608248", - "tt2828960", - "tt6470396", - "tt11165002", - "tt8105958", - "tt7563270", - "tt6045840", - "tt11164368", - "tt1724587", - "tt5165368", - "tt0286486", - "tt11503082", - "tt3847626", - "tt0060028", - "tt0068149", - "tt0094540", - "tt5179408", - "tt4007694", - "tt2710394", - "tt1578873", - "tt10165710", - "tt9316002", - "tt4481322", - "tt2057544", - "tt5690880", - "tt8680646", - "tt7875794", - "tt2788780", - "tt0331136", - "tt0086817", - "tt4643084", - "tt0251497", - "tt10614130", - "tt7935522", - "tt11333564", - "tt0072515", - "tt5862660", - "tt8199790", - "tt7895644", - "tt0086739", - "tt1807165", - "tt3087752", - "tt4146128", - "tt0090501", - "tt5711138", - "tt4049426", - "tt1366312", - "tt1596589", - "tt1800864", - "tt4474310", - "tt2708572", - "tt5608708", - "tt0053494", - "tt0092455", - "tt1863526", - "tt7623324", - "tt1094229", - "tt5116280", - "tt7821582", - "tt7452964", - "tt5595688", - "tt9893174", - "tt7942794", - "tt1837576", - "tt4698826", - "tt4591680", - "tt2022170", - "tt2497788", - "tt4687892", - "tt4174574", - "tt1546360", - "tt3327208", - "tt5884424", - "tt1008108", - "tt0126170", - "tt0472954", - "tt1442550", - "tt7572950", - "tt2245117", - "tt0103569", - "tt8289480", - "tt6938856", - "tt11569628", - "tt2014681", - "tt2151454", - "tt4979474", - "tt1942683", - "tt6911516", - "tt10585042", - "tt2288064", - "tt4258440", - "tt7907918", - "tt3323824", - "tt10075244", - "tt7877070", - "tt7122766", - "tt4574334", - "tt2248977", - "tt10687170", - "tt0398417", - "tt1865572", - "tt10614024", - "tt8840048", - "tt1751105", - "tt0099864", - "tt10534980", - "tt11142824", - "tt2334302", - "tt4121024", - "tt5152264", - "tt3915918", - "tt8499046", - "tt9174576", - "tt5843072", - "tt8019790", - "tt1842973", - "tt4677934", - "tt3673456", - "tt1460746", - "tt3684684", - "tt7889590", - "tt6560040", - "tt5193358", - "tt5730690", - "tt2262308", - "tt6931604", - "tt9165752", - "tt5625066", - "tt7343832", - "tt8905948", - "tt0384013", - "tt3715438", - "tt2297520", - "tt7099334", - "tt6232560", - "tt0489606", - "tt4567314", - "tt3012532", - "tt1433058", - "tt9077530", - "tt10675190", - "tt6397256", - "tt3520702", - "tt1728860", - "tt5378198", - "tt5270356", - "tt11304750", - "tt2733252", - "tt5596646", - "tt11348378", - "tt1711420", - "tt4922804", - "tt7441658", - "tt11617414", - "tt4175634", - "tt5363650", - "tt5500906", - "tt1242773", - "tt4312418", - "tt0804503", - "tt3132738", - "tt6024868", - "tt5376862", - "tt1297754", - "tt2122954", - "tt5451180", - "tt9755726", - "tt7725422", - "tt4728244", - "tt6164872", - "tt7645846", - "tt2184980", - "tt4378456", - "tt0839188", - "tt6744266", - "tt6674310", - "tt6621102", - "tt3216608", - "tt10515488", - "tt7186588", - "tt4953128", - "tt9303692", - "tt4141954", - "tt2147995", - "tt2256592", - "tt11497922", - "tt8115460", - "tt0103584", - "tt7361424", - "tt5096916", - "tt3463606", - "tt0452573", - "tt5327970", - "tt4843640", - "tt8165086", - "tt8808524", - "tt6389490", - "tt10738718", - "tt9387570", - "tt11194508", - "tt4036886", - "tt1601141", - "tt2762476", - "tt3268200", - "tt4591316", - "tt0072584", - "tt8595140", - "tt1566154", - "tt2391224", - "tt0068103", - "tt6811236", - "tt8032884", - "tt1758772", - "tt9327146", - "tt0058801", - "tt6176812", - "tt0190919", - "tt9307990", - "tt9886950", - "tt7375404", - "tt5277914", - "tt7524382", - "tt7410974", - "tt9080978", - "tt8394476", - "tt9083140", - "tt7180738", - "tt5669272", - "tt4035574", - "tt1552112", - "tt1379690", - "tt1458521", - "tt0495055", - "tt1478503", - "tt2770994", - "tt4508624", - "tt4574700", - "tt7138040", - "tt5615874", - "tt7243884", - "tt5705956", - "tt8887828", - "tt0078607", - "tt9314120", - "tt1034007", - "tt2818496", - "tt7094780", - "tt6222202", - "tt1197649", - "tt3909280", - "tt1569972", - "tt2707408", - "tt2183404", - "tt4424852", - "tt7078710", - "tt7178034", - "tt8001788", - "tt1332030", - "tt6116060", - "tt10720914", - "tt8430356", - "tt1806688", - "tt3556920", - "tt4779762", - "tt8650734", - "tt5028002", - "tt2249007", - "tt4367560", - "tt2049116", - "tt8594510", - "tt1327801", - "tt4970456", - "tt4511974", - "tt11018282", - "tt8430234", - "tt1835129", - "tt0465316", - "tt4719744", - "tt1615926", - "tt8784324", - "tt0106126", - "tt0287198", - "tt4145384", - "tt1563069", - "tt7720702", - "tt4941240", - "tt5905354", - "tt11621718", - "tt1821681", - "tt3292726", - "tt0072562", - "tt6814144", - "tt3900614", - "tt7680844", - "tt3447440", - "tt9812514", - "tt4594958", - "tt9078908", - "tt0863046", - "tt3214310", - "tt6675712", - "tt1740717", - "tt10919902", - "tt7671598", - "tt3807034", - "tt7503766", - "tt1255913", - "tt4958538", - "tt5482406", - "tt10539484", - "tt10919454", - "tt5617060", - "tt3011234", - "tt5024912", - "tt6100948", - "tt7510830", - "tt1549918", - "tt2402321", - "tt9674954", - "tt0313038", - "tt3842964", - "tt6696736", - "tt9530198", - "tt1138645", - "tt10329042", - "tt0499410", - "tt9170224", - "tt4857508", - "tt7386600", - "tt0094574", - "tt8111088", - "tt2656614", - "tt3069212", - "tt7587362", - "tt8140732", - "tt9287050", - "tt0478947", - "tt4419496", - "tt7188964", - "tt1243719", - "tt7426142", - "tt2871832", - "tt5397520", - "tt7503792", - "tt0080231", - "tt0965394", - "tt2477230", - "tt3900828", - "tt2402137", - "tt2310212", - "tt0057748", - "tt0944947", - "tt9418676", - "tt1043090", - "tt3314228", - "tt5460226", - "tt7620702", - "tt5691130", - "tt2268019", - "tt2189258", - "tt10369876", - "tt8457940", - "tt5995370", - "tt5580386", - "tt1059475", - "tt6215600", - "tt8271124", - "tt6461812", - "tt7826126", - "tt6172806", - "tt2226342", - "tt6971054", - "tt4428122", - "tt7955626", - "tt1877895", - "tt5500158", - "tt7449828", - "tt5863126", - "tt8510610", - "tt2433570", - "tt6352180", - "tt5432548", - "tt5963958", - "tt7358910", - "tt0264235", - "tt6101862", - "tt8403536", - "tt1567432", - "tt7293754", - "tt2390276", - "tt0060036", - "tt2202713", - "tt8316986", - "tt6059460", - "tt6353368", - "tt1837642", - "tt7310890", - "tt7010622", - "tt4276618", - "tt0810788", - "tt2368645", - "tt4324330", - "tt4180738", - "tt0465326", - "tt4903242", - "tt1625724", - "tt4168608", - "tt0487831", - "tt0280330", - "tt4355188", - "tt3679166", - "tt2149175", - "tt0295064", - "tt2321596", - "tt11122470", - "tt5512352", - "tt8010342", - "tt5722190", - "tt8591984", - "tt2389845", - "tt3451690", - "tt9039142", - "tt6636246", - "tt10753590", - "tt7699414", - "tt3326054", - "tt7645192", - "tt0892700", - "tt2136138", - "tt5337806", - "tt2885556", - "tt4270492", - "tt9773260", - "tt6390538", - "tt4970276", - "tt5189670", - "tt6845424", - "tt4568108", - "tt5071412", - "tt0491603", - "tt2577192", - "tt0106102", - "tt1832207", - "tt0136658", - "tt1833285", - "tt2074248", - "tt0472023", - "tt8425308", - "tt8778064", - "tt3502172", - "tt2375720", - "tt4003966", - "tt2344781", - "tt9056536", - "tt6510950", - "tt3012698", - "tt9621146", - "tt2057193", - "tt4912992", - "tt0324924", - "tt3286608", - "tt5957766", - "tt4634294", - "tt2709648", - "tt0112167", - "tt4194110", - "tt9812894", - "tt7296380", - "tt7423526", - "tt1699659", - "tt10449632", - "tt6358878", - "tt2583620", - "tt4960458", - "tt2753166", - "tt7976568", - "tt3780132", - "tt3865236", - "tt2788432", - "tt0780438", - "tt7211618", - "tt5665418", - "tt0426769", - "tt3922704", - "tt2043143", - "tt1181541", - "tt2782214", - "tt0074074", - "tt3010856", - "tt4231432", - "tt2176287", - "tt7094798", - "tt0195455", - "tt8524448", - "tt4094300", - "tt4855114", - "tt2231644", - "tt8548870", - "tt1695366", - "tt3690362", - "tt4699514", - "tt3044834", - "tt4997250", - "tt8201814", - "tt1733785", - "tt6517320", - "tt4132692", - "tt3683038", - "tt5812294", - "tt1669774", - "tt8880894", - "tt3499954", - "tt8594496", - "tt6092060", - "tt7944664", - "tt6332568", - "tt6453190", - "tt6934964", - "tt5462936", - "tt4719888", - "tt1034201", - "tt7116050", - "tt2151337", - "tt2069135", - "tt4667710", - "tt0830161", - "tt5618284", - "tt6488862", - "tt5958514", - "tt4939064", - "tt5338744", - "tt7242816", - "tt2128211", - "tt3147316", - "tt5447830", - "tt7411098", - "tt8342862", - "tt0844203", - "tt11000526", - "tt4999820", - "tt1936696", - "tt2657262", - "tt4442462", - "tt4733278", - "tt8075272", - "tt11302324", - "tt10133418", - "tt9046520", - "tt6403968", - "tt3148302", - "tt1190689", - "tt2788518", - "tt8263666", - "tt7958326", - "tt5675620", - "tt1583607", - "tt10085386", - "tt5663062", - "tt0799862", - "tt6131920", - "tt3186894", - "tt2523506", - "tt2336630", - "tt7344644", - "tt8966970", - "tt0934320", - "tt1718437", - "tt11301834", - "tt6873658", - "tt0274988", - "tt5895884", - "tt6882202", - "tt7924854", - "tt5031234", - "tt1458809", - "tt5420376", - "tt4568372", - "tt5126414", - "tt8634332", - "tt6264432", - "tt0759475", - "tt3787754", - "tt10540562", - "tt9322904", - "tt2073664", - "tt5765188", - "tt9078960", - "tt1821032", - "tt10220588", - "tt5849156", - "tt2603568", - "tt1178636", - "tt8439492", - "tt0358796", - "tt2647544", - "tt7205264", - "tt8243158", - "tt8421152", - "tt5692740", - "tt6392176", - "tt0106053", - "tt2609546", - "tt6214876", - "tt8271176", - "tt2950342", - "tt5865052", - "tt6294402", - "tt7493176", - "tt2057511", - "tt10580092", - "tt1659175", - "tt3038546", - "tt7391648", - "tt2714046", - "tt8001146", - "tt1685401", - "tt3727552", - "tt5900600", - "tt9690302", - "tt0458253", - "tt1558182", - "tt2943110", - "tt10486740", - "tt5271054", - "tt3615538", - "tt8035424", - "tt8336340", - "tt5599272", - "tt7518558", - "tt9165134", - "tt0969654", - "tt2272367", - "tt0071039", - "tt3052478", - "tt3595776", - "tt0206501", - "tt5320160", - "tt0103359", - "tt6487416", - "tt8548830", - "tt0412253", - "tt7336778", - "tt1440346", - "tt0063893", - "tt8328460", - "tt5151816", - "tt2402569", - "tt1584150", - "tt6086806", - "tt5419200", - "tt1586680", - "tt1124354", - "tt7402414", - "tt1031283", - "tt2204345", - "tt2983606", - "tt5628334", - "tt8783862", - "tt4196686", - "tt2548200", - "tt11191198", - "tt4126382", - "tt2593336", - "tt7947854", - "tt5292622", - "tt2654620", - "tt1127205", - "tt0772139", - "tt7160640", - "tt10065544", - "tt10477528", - "tt0098740", - "tt8597326", - "tt9698520", - "tt1833403", - "tt8136292", - "tt3909224", - "tt7174764", - "tt1567254", - "tt1266020", - "tt3596178", - "tt2829558", - "tt9077196", - "tt2761630", - "tt7255502", - "tt0995832", - "tt6928052", - "tt1688612", - "tt1364951", - "tt10715148", - "tt9708550", - "tt3261308", - "tt7142738", - "tt9131050", - "tt2745774", - "tt7893758", - "tt0097553", - "tt0118375", - "tt2731624", - "tt1864017", - "tt1756927", - "tt8305310", - "tt7551216", - "tt4145454", - "tt2623754", - "tt7134506", - "tt10687510", - "tt5787720", - "tt8602408", - "tt4147780", - "tt7324540", - "tt5338544", - "tt9425126", - "tt1213404", - "tt1059455", - "tt6329790", - "tt7422812", - "tt3893314", - "tt0085017", - "tt10659518", - "tt8004848", - "tt8344332", - "tt9067020", - "tt1832668", - "tt10050772", - "tt2374617", - "tt7428106", - "tt3514798", - "tt7464074", - "tt8425404", - "tt7188736", - "tt9310400", - "tt1780441", - "tt6048596", - "tt7413448", - "tt1628033", - "tt4916574", - "tt7712598", - "tt2618986", - "tt0165052", - "tt1442553", - "tt10181132", - "tt2012383", - "tt9046782", - "tt2099034", - "tt7971476", - "tt8531538", - "tt1720619", - "tt3435532", - "tt8417266", - "tt1579295", - "tt3532050", - "tt9062846", - "tt7235406", - "tt1740299", - "tt3642902", - "tt5691552", - "tt10559276", - "tt6522758", - "tt2408444", - "tt4642170", - "tt0341855", - "tt7658402", - "tt1166709", - "tt4264096", - "tt7554052", - "tt4193662", - "tt1802968", - "tt1691602", - "tt7083006", - "tt6294706", - "tt2674484", - "tt8381724", - "tt9077194", - "tt5899470", - "tt2220768", - "tt6632666", - "tt10466426", - "tt2861424", - "tt0055708", - "tt4049416", - "tt3147692", - "tt8697554", - "tt4878488", - "tt0203259", - "tt8297022", - "tt0948538", - "tt1332150", - "tt1195419", - "tt4144890", - "tt1051155", - "tt2071236", - "tt3749900", - "tt8390274", - "tt4277268", - "tt3061830", - "tt4210022", - "tt5486088", - "tt9686380", - "tt4481266", - "tt11318602", - "tt8873996", - "tt7470116", - "tt2245283", - "tt3869500", - "tt7822618", - "tt6659624", - "tt7539608", - "tt2872488", - "tt0960136", - "tt0149437", - "tt5094928", - "tt2346169", - "tt4786824", - "tt2188931", - "tt6021408", - "tt9704798", - "tt6229656", - "tt4938700", - "tt5574490", - "tt4715246", - "tt6256616", - "tt1408430", - "tt0111999", - "tt3229454", - "tt2647420", - "tt7502274", - "tt0421030", - "tt7740574", - "tt4905554", - "tt3322314", - "tt9077192", - "tt7468900", - "tt5015928", - "tt4159076", - "tt11011366", - "tt9780458", - "tt6483836", - "tt5459976", - "tt3652662", - "tt0770762", - "tt3037520", - "tt0388644", - "tt10332322", - "tt11053220", - "tt10665386", - "tt11178330", - "tt10474088", - "tt3824414", - "tt8817836", - "tt1044418", - "tt0815063", - "tt2825020", - "tt4941288", - "tt7678910", - "tt7510024", - "tt10327354", - "tt1086761", - "tt10027990", - "tt9170638", - "tt3337596", - "tt6539502", - "tt0094535", - "tt9656532", - "tt3891038", - "tt11541444", - "tt6470478", - "tt1554356", - "tt7649694", - "tt3487356", - "tt8456094", - "tt3585270", - "tt4800878", - "tt7050910", - "tt1591493", - "tt1997999", - "tt0830361", - "tt6304534", - "tt3434132", - "tt4158110", - "tt1442109", - "tt9557812", - "tt11658046", - "tt2181219", - "tt3413236", - "tt6150576", - "tt0185906", - "tt7153034", - "tt10730508", - "tt10023178", - "tt11004134", - "tt8289758", - "tt1442464", - "tt6684226", - "tt8906172", - "tt7306056", - "tt6040674", - "tt2109059", - "tt3718778", - "tt2228547", - "tt4651448", - "tt10555674", - "tt9113406", - "tt1484823", - "tt8257674", - "tt8548866", - "tt7472896", - "tt2521978", - "tt1830379", - "tt2033616", - "tt4354880", - "tt7440784", - "tt6807442", - "tt0460690", - "tt2960796", - "tt2084712", - "tt4908908", - "tt4680360", - "tt0118276", - "tt8475274", - "tt9359222", - "tt0486657", - "tt8728268", - "tt4635208", - "tt4908956", - "tt7861584", - "tt7997214", - "tt5361426", - "tt2193743", - "tt11208504", - "tt8961828", - "tt0454349", - "tt8680948", - "tt5512658", - "tt8792570", - "tt4424758", - "tt1830924", - "tt3953642", - "tt3727036", - "tt5952634", - "tt7488702", - "tt0318236", - "tt1495708", - "tt6437276", - "tt4600404", - "tt7364546", - "tt9879074", - "tt6268052", - "tt5830254", - "tt1765622", - "tt0088559", - "tt2351868", - "tt4132196", - "tt8961508", - "tt0484243", - "tt10681670", - "tt0292414", - "tt1519931", - "tt2232345", - "tt7120662", - "tt7526498", - "tt0460644", - "tt0383795", - "tt5748116", - "tt3117322", - "tt2709224", - "tt7712594", - "tt10584446", - "tt6203758", - "tt8027624", - "tt7646318", - "tt2245988", - "tt3250026", - "tt4688156", - "tt1820742", - "tt6905542", - "tt1974470", - "tt4396862", - "tt4341996", - "tt6658720", - "tt0278191", - "tt8372778", - "tt6890566", - "tt4608812", - "tt2342499", - "tt5712554", - "tt0977628", - "tt0844441", - "tt1327810", - "tt3484180", - "tt0437714", - "tt1806234", - "tt4338988", - "tt6289132", - "tt0296310", - "tt9615014", - "tt2712966", - "tt7818686", - "tt7514746", - "tt0490035", - "tt3484274", - "tt4338336", - "tt5901348", - "tt2315850", - "tt8462412", - "tt1281256", - "tt9808680", - "tt0353115", - "tt2224645", - "tt0413573", - "tt8119642", - "tt4396630", - "tt5467332", - "tt0773262", - "tt3920814", - "tt5813158", - "tt2705602", - "tt6791846", - "tt0380136", - "tt0115288", - "tt4040530", - "tt2402207", - "tt1720019", - "tt7772588", - "tt1105711", - "tt6283542", - "tt0290111", - "tt4899548", - "tt2543312", - "tt3097686", - "tt0454731", - "tt10228276", - "tt8365054", - "tt11018018", - "tt3106400", - "tt4575056", - "tt3473134", - "tt4640050", - "tt1587934", - "tt8888322", - "tt7016936", - "tt1530848", - "tt8531222", - "tt10019004", - "tt1378167", - "tt9765222", - "tt8502560", - "tt10265158", - "tt10608396", - "tt11390530", - "tt3591200", - "tt0437700", - "tt6980394", - "tt0050079", - "tt5730102", - "tt1520211", - "tt10055734", - "tt6170874", - "tt2466292", - "tt10243640", - "tt4520992", - "tt1790939", - "tt0159206", - "tt4331478", - "tt8098384", - "tt5396928", - "tt9108604", - "tt1839337", - "tt2555880", - "tt7599936", - "tt2524222", - "tt4236770", - "tt2869898", - "tt1719837", - "tt3232102", - "tt8738580", - "tt3559912", - "tt5816568", - "tt3496764", - "tt6926374", - "tt6097696", - "tt0159876", - "tt5257744", - "tt8068860", - "tt6916746", - "tt0770659", - "tt6226232", - "tt2244871", - "tt0259153", - "tt0462128", - "tt1280822", - "tt0289825", - "tt7439546", - "tt1790914", - "tt6319696", - "tt3542324", - "tt0086675", - "tt2832756", - "tt0350448", - "tt1630574", - "tt11007040", - "tt5068750", - "tt7396134", - "tt2361094", - "tt3341382", - "tt1278016", - "tt6241856", - "tt8362852", - "tt6628364", - "tt8404094", - "tt1794147", - "tt2621446", - "tt1721666", - "tt6509474", - "tt1600690", - "tt0179552", - "tt5538644", - "tt7981232", - "tt2649522", - "tt1771072", - "tt1149608", - "tt6953912", - "tt6968586", - "tt0814164", - "tt10323232", - "tt8882486", - "tt7772610", - "tt1232320", - "tt3098842", - "tt6659572", - "tt6459410", - "tt7411686", - "tt4791250", - "tt8893810", - "tt0826760", - "tt0063878", - "tt3906560", - "tt2919910", - "tt5626028", - "tt8938060", - "tt1553620", - "tt0364151", - "tt6316862", - "tt1865718", - "tt5734342", - "tt2049036", - "tt5369352", - "tt7559438", - "tt2400631", - "tt4816364", - "tt5329344", - "tt7261310", - "tt0070904", - "tt9690214", - "tt7333970", - "tt5705416", - "tt0257295", - "tt3593456", - "tt0094484", - "tt2474952", - "tt8494614", - "tt5897570", - "tt2382108", - "tt0299285", - "tt5209280", - "tt10594194", - "tt0075500", - "tt6816780", - "tt6903256", - "tt6517102", - "tt11602670", - "tt4635922", - "tt5023666", - "tt3021686", - "tt1131746", - "tt2177461", - "tt2407574", - "tt5212822", - "tt5133742", - "tt8235236", - "tt6565892", - "tt1955311", - "tt1322240", - "tt7879820", - "tt10332508", - "tt3704280", - "tt5511582", - "tt6613246", - "tt5503718", - "tt8762206", - "tt6974848", - "tt3138900", - "tt4667888", - "tt6101726", - "tt3810832", - "tt4644488", - "tt7034646", - "tt10474124", - "tt0075561", - "tt1461312", - "tt7938588", - "tt10687236", - "tt4192766", - "tt7616830", - "tt9814900", - "tt3218680", - "tt1837492", - "tt5603868", - "tt7766172", - "tt5853176", - "tt4041694", - "tt0491738", - "tt9824096", - "tt1885032", - "tt2297604", - "tt8069036", - "tt2701582", - "tt10999912", - "tt7026882", - "tt10058722", - "tt1841321", - "tt9024590", - "tt3544772", - "tt0285333", - "tt9628244", - "tt2815618", - "tt0085106", - "tt4322334", - "tt3231380", - "tt2319282", - "tt6064882", - "tt11079096", - "tt11091524", - "tt6600720", - "tt5734106", - "tt7008682", - "tt8560732", - "tt10327830", - "tt4196822", - "tt2571774", - "tt10370734", - "tt2182427", - "tt5664952", - "tt8300324", - "tt2260666", - "tt2735544", - "tt0112173", - "tt4387170", - "tt1190931", - "tt2368005", - "tt10133864", - "tt8840790", - "tt3496824", - "tt0850642", - "tt2386354", - "tt10163846", - "tt5515212", - "tt0103428", - "tt7126878", - "tt0086765", - "tt5266278", - "tt9145334", - "tt0476918", - "tt3766376", - "tt1466074", - "tt5651776", - "tt7889220", - "tt9657538", - "tt7988304", - "tt2608368", - "tt1181320", - "tt1489428", - "tt4193176", - "tt5564124", - "tt3107224", - "tt6186672", - "tt1898575", - "tt5665928", - "tt0227972", - "tt4167694", - "tt2242025", - "tt8714904", - "tt5752322", - "tt0090500", - "tt5519574", - "tt2314792", - "tt3746010", - "tt3924978", - "tt2802850", - "tt6522580", - "tt1266003", - "tt5640558", - "tt8123920", - "tt3017438", - "tt6503244", - "tt8259142", - "tt2442560", - "tt3655448", - "tt0073965", - "tt7259746", - "tt7631146", - "tt2395695", - "tt3062328", - "tt5555260", - "tt1870946", - "tt6688750", - "tt0283203", - "tt3182934", - "tt6077448", - "tt2006005", - "tt7509270", - "tt1717455", - "tt0098898", - "tt5874840", - "tt2287307", - "tt8893502", - "tt2056366", - "tt1818912", - "tt0787490", - "tt1643266", - "tt2257959", - "tt8815200", - "tt0314979", - "tt1119644", - "tt6538064", - "tt4791174", - "tt4112184", - "tt2406986", - "tt10554898", - "tt0156205", - "tt0389564", - "tt4374208", - "tt3904962", - "tt4576012", - "tt3859618", - "tt3551980", - "tt8655736", - "tt3499120", - "tt8273006", - "tt0934814", - "tt11463862", - "tt3598496", - "tt8650772", - "tt7492122", - "tt6264964", - "tt5657014", - "tt7439552", - "tt9204128", - "tt3475084", - "tt2654580", - "tt1492627", - "tt0364782", - "tt2738096", - "tt0402711", - "tt8694364", - "tt9702106", - "tt0239195", - "tt0972412", - "tt4269898", - "tt6416240", - "tt8996534", - "tt8201186", - "tt0976192", - "tt0369117", - "tt2378020", - "tt8001718", - "tt4777214", - "tt5344382", - "tt4341348", - "tt0489974", - "tt5932548", - "tt5363872", - "tt6149182", - "tt8660526", - "tt0482857", - "tt7558108", - "tt3281796", - "tt1808757", - "tt4370528", - "tt5987254", - "tt5311790", - "tt7229296", - "tt10106108", - "tt0362192", - "tt2402061", - "tt11261424", - "tt11230262", - "tt2632424", - "tt10098580", - "tt7538868", - "tt4228724", - "tt1361839", - "tt6660498", - "tt5105306", - "tt7801964", - "tt3828162", - "tt7948996", - "tt1759761", - "tt3068894", - "tt1770959", - "tt0944820", - "tt0072564", - "tt8594324", - "tt2174367", - "tt9169602", - "tt4726480", - "tt3305096", - "tt2362694", - "tt4276624", - "tt10312776", - "tt5637292", - "tt6035850", - "tt2357908", - "tt6769208", - "tt11110622", - "tt2758950", - "tt4791170", - "tt1960255", - "tt3216832", - "tt5820530", - "tt0785062", - "tt2390334", - "tt8311576", - "tt2198439", - "tt5464086", - "tt9098432", - "tt6147214", - "tt2649588", - "tt9516768", - "tt2392179", - "tt2393813", - "tt1772752", - "tt0086734", - "tt5673782", - "tt1600199", - "tt2480498", - "tt7745956", - "tt0108941", - "tt0795176", - "tt0496343", - "tt10426684", - "tt3019170", - "tt2484950", - "tt6358456", - "tt2693776", - "tt3032476", - "tt0073972", - "tt5360472", - "tt5335606", - "tt5990044", - "tt0182576", - "tt8450534", - "tt0408381", - "tt9454736", - "tt1710295", - "tt3986852", - "tt1186342", - "tt3315386", - "tt0758745", - "tt1320066", - "tt8305276", - "tt2763296", - "tt1200227", - "tt2647258", - "tt1409008", - "tt0115097", - "tt6186402", - "tt3063454", - "tt6845434", - "tt6304676", - "tt4168956", - "tt8046482", - "tt6473300", - "tt1125758", - "tt3118014", - "tt1958961", - "tt8565136", - "tt7292950", - "tt1830154", - "tt2316306", - "tt2325846", - "tt0346314", - "tt1885780", - "tt2561882", - "tt3629782", - "tt5174766", - "tt5057054", - "tt4636870", - "tt0101206", - "tt0068037", - "tt10608476", - "tt7689460", - "tt8887956", - "tt0924651", - "tt1493239", - "tt5160872", - "tt0106179", - "tt5079788", - "tt3467018", - "tt7661384", - "tt8791742", - "tt1861510", - "tt1954804", - "tt7768192", - "tt2394340", - "tt11458672", - "tt0063936", - "tt7178298", - "tt6053538", - "tt7493974", - "tt1663654", - "tt9516466", - "tt1220617", - "tt0320037", - "tt0238781", - "tt6233884", - "tt10186846", - "tt8649216", - "tt6148376", - "tt5478730", - "tt7677740", - "tt3080030", - "tt0115270", - "tt4450826", - "tt10516874", - "tt6100640", - "tt0445912", - "tt1396212", - "tt7900174", - "tt7759016", - "tt8893566", - "tt0446622", - "tt1313176", - "tt5737466", - "tt4532640", - "tt1790233", - "tt2100976", - "tt11822998", - "tt7768836", - "tt5615840", - "tt5797374", - "tt8146868", - "tt7620312", - "tt8001214", - "tt8810398", - "tt1538039", - "tt8845444", - "tt1608180", - "tt5834256", - "tt4787000", - "tt8367736", - "tt6415656", - "tt6233054", - "tt7183074", - "tt2455546", - "tt7024616", - "tt6269080", - "tt3230454", - "tt9425082", - "tt5512432", - "tt10777024", - "tt6664704", - "tt9817236", - "tt1449940", - "tt11000396", - "tt4766594", - "tt4977374", - "tt8050858", - "tt1919418", - "tt1074206", - "tt0310416", - "tt10207090", - "tt5424556", - "tt2147632", - "tt3315102", - "tt3967910", - "tt2882076", - "tt8826128", - "tt2341762", - "tt5473364", - "tt2301643", - "tt2176353", - "tt5936838", - "tt0166428", - "tt7942774", - "tt1433870", - "tt10380884", - "tt4488404", - "tt0319960", - "tt1804155", - "tt1319900", - "tt2343157", - "tt5569062", - "tt2715776", - "tt2334524", - "tt2297757", - "tt0063946", - "tt6404896", - "tt8303084", - "tt10087022", - "tt5779830", - "tt6439752", - "tt9576820", - "tt6423364", - "tt2349440", - "tt7604446", - "tt4934214", - "tt1945727", - "tt2374744", - "tt3722332", - "tt0105986", - "tt5485566", - "tt6394324", - "tt4520906", - "tt5635260", - "tt0062588", - "tt7601732", - "tt0213327", - "tt1856010", - "tt8641686", - "tt7153382", - "tt1726839", - "tt5101192", - "tt1685313", - "tt5496320", - "tt7158972", - "tt5938484", - "tt0098878", - "tt1989062", - "tt1236246", - "tt11744632", - "tt5640060", - "tt9777918", - "tt1124014", - "tt11399212", - "tt3706628", - "tt3335074", - "tt7425626", - "tt5299008", - "tt6416314", - "tt5932466", - "tt5691156", - "tt7635308", - "tt6937242", - "tt7637506", - "tt5462886", - "tt7572868", - "tt0133302", - "tt2227610", - "tt1192302", - "tt3333880", - "tt8543258", - "tt2057856", - "tt11141900", - "tt4688512", - "tt3502262", - "tt0318959", - "tt1582459", - "tt4986084", - "tt2010806", - "tt3952772", - "tt1626459", - "tt2543328", - "tt8448018", - "tt2427220", - "tt3951238", - "tt0078701", - "tt7161312", - "tt1851040", - "tt5721172", - "tt7286078", - "tt7459986", - "tt8894324", - "tt8610212", - "tt7673112", - "tt8892926", - "tt3038248", - "tt4422756", - "tt9412802", - "tt5195114", - "tt6775816", - "tt6156654", - "tt3839272", - "tt4006826", - "tt0972534", - "tt0115392", - "tt8959856", - "tt9466968", - "tt2203143", - "tt7234598", - "tt9250894", - "tt8019444", - "tt5966964", - "tt5085832", - "tt8575476", - "tt8860450", - "tt0376390", - "tt8289292", - "tt3061050", - "tt4549142", - "tt11138524", - "tt5619658", - "tt5066664", - "tt7733422", - "tt6586344", - "tt4928166", - "tt0463398", - "tt8276298", - "tt4522400", - "tt2262383", - "tt6946984", - "tt3983112", - "tt4267002", - "tt5458832", - "tt4991674", - "tt9378632", - "tt8773338", - "tt4658614", - "tt5869342", - "tt8787756", - "tt8265286", - "tt8319644", - "tt2229907", - "tt9054904", - "tt9165706", - "tt3843168", - "tt0343314", - "tt4397866", - "tt0112111", - "tt7214622", - "tt9237632", - "tt6174216", - "tt2655470", - "tt2057611", - "tt1336911", - "tt10709178", - "tt0366025", - "tt6786518", - "tt10583412", - "tt5640416", - "tt0068040", - "tt9199168", - "tt9787504", - "tt7414954", - "tt8509962", - "tt2603414", - "tt4334446", - "tt2350779", - "tt4421578", - "tt3199398", - "tt10711784", - "tt8905964", - "tt6675556", - "tt1128727", - "tt4895568", - "tt0821375", - "tt2333420", - "tt0207919", - "tt7656606", - "tt1240976", - "tt0318224", - "tt2401256", - "tt2933118", - "tt0875149", - "tt4789576", - "tt2509804", - "tt9331982", - "tt0248654", - "tt8267440", - "tt2957824", - "tt7718088", - "tt2699780", - "tt4803766", - "tt5233094", - "tt3910804", - "tt7653274", - "tt9064792", - "tt7776244", - "tt7205552", - "tt7586086", - "tt9327348", - "tt5116962", - "tt3103340", - "tt10675488", - "tt5011816", - "tt2293529", - "tt5546352", - "tt5884792", - "tt1809014", - "tt0452718", - "tt3514886", - "tt8403622", - "tt5193662", - "tt1934673", - "tt0845746", - "tt7532674", - "tt0460666", - "tt7613210", - "tt8787746", - "tt0066667", - "tt8712664", - "tt7683300", - "tt4716164", - "tt6684082", - "tt6153318", - "tt11497386", - "tt2133695", - "tt3788022", - "tt9397406", - "tt2014553", - "tt1830617", - "tt0088641", - "tt9261290", - "tt1082583", - "tt8421554", - "tt2136396", - "tt3996158", - "tt2543378", - "tt1495950", - "tt8694866", - "tt1759136", - "tt1663641", - "tt4291722", - "tt3039270", - "tt2365946", - "tt3444278", - "tt11111164", - "tt9601246", - "tt7674544", - "tt5969074", - "tt2662810", - "tt7395992", - "tt1649194", - "tt6130902", - "tt2372220", - "tt1366321", - "tt1024932", - "tt3735164", - "tt7654820", - "tt8755226", - "tt8337704", - "tt1695989", - "tt1877010", - "tt7913450", - "tt0121955", - "tt0452046", - "tt7907916", - "tt5108952", - "tt5202520", - "tt5714712", - "tt8128854", - "tt5098926", - "tt8994238", - "tt6117020", - "tt0112040", - "tt2968902", - "tt2191671", - "tt1844624", - "tt0983334", - "tt1001482", - "tt3175512", - "tt6082618", - "tt7979042", - "tt3079768", - "tt4568288", - "tt7801780", - "tt5809150", - "tt9654082", - "tt6246500", - "tt4519292", - "tt0118480", - "tt1693592", - "tt0280277", - "tt5275894", - "tt11120674", - "tt2377081", - "tt0844653", - "tt6387572", - "tt1315063", - "tt10850888", - "tt1936714", - "tt8014232", - "tt5437394", - "tt0178149", - "tt2152721", - "tt5686194", - "tt1586676", - "tt3585200", - "tt8888656", - "tt10734254", - "tt6647696", - "tt2022713", - "tt7911424", - "tt5957358", - "tt0060009", - "tt7263064", - "tt1836237", - "tt8336664", - "tt6038954", - "tt10183430", - "tt5674272", - "tt4715134", - "tt3549044", - "tt2761354", - "tt0443412", - "tt0105943", - "tt5518198", - "tt3748704", - "tt4785472", - "tt3807022", - "tt0439100", - "tt1441135", - "tt0935095", - "tt10659366", - "tt3310544", - "tt1704292", - "tt0955346", - "tt0180241", - "tt6340730", - "tt0312172", - "tt0840196", - "tt3149010", - "tt6902652", - "tt7737500", - "tt1757202", - "tt6264782", - "tt10271544", - "tt8650584", - "tt5805254", - "tt6821044", - "tt4836266", - "tt2746566", - "tt5165412", - "tt8681676", - "tt10023174", - "tt9055008", - "tt6014022", - "tt5536354", - "tt3168978", - "tt5336698", - "tt9614090", - "tt0090424", - "tt2193021", - "tt2183641", - "tt5159916", - "tt0943690", - "tt8369840", - "tt6544166", - "tt9099570", - "tt7529610", - "tt6570046", - "tt10675716", - "tt0088580", - "tt0959601", - "tt4111430", - "tt2520946", - "tt9066034", - "tt4944694", - "tt2514438", - "tt4224588", - "tt2346273", - "tt2361621", - "tt6743832", - "tt1819509", - "tt3879306", - "tt5067282", - "tt7752034", - "tt1283456", - "tt0080240", - "tt2964118", - "tt6145878", - "tt6237046", - "tt8772296", - "tt1235099", - "tt3052798", - "tt1430587", - "tt1772157", - "tt0273855", - "tt4047038", - "tt0063950", - "tt7439554", - "tt5875646", - "tt1489403", - "tt10079760", - "tt9315008", - "tt2630716", - "tt6111130", - "tt5260528", - "tt1709198", - "tt6287684", - "tt1983079", - "tt7431790", - "tt1513168", - "tt10257338", - "tt2748608", - "tt3522052", - "tt1403966", - "tt1319690", - "tt3121722", - "tt6107486", - "tt3181672", - "tt0144700", - "tt6546758", - "tt2069449", - "tt0988824", - "tt6021862", - "tt3665292", - "tt6775794", - "tt5722072", - "tt8050756", - "tt3877200", - "tt0259127", - "tt8077544", - "tt8134186", - "tt8069360", - "tt2219622", - "tt3955680", - "tt9552658", - "tt4877736", - "tt8611524", - "tt3054698", - "tt11650204", - "tt6317068", - "tt2058221", - "tt9770286", - "tt2707792", - "tt0983983", - "tt8962130", - "tt3777108", - "tt8115462", - "tt4947608", - "tt4594334", - "tt2805574", - "tt3864896", - "tt4212188", - "tt8005374", - "tt6423884", - "tt5275892", - "tt0092400", - "tt10981266", - "tt0129712", - "tt7661368", - "tt3370324", - "tt0184122", - "tt5432988", - "tt0499383", - "tt3713822", - "tt1361778", - "tt2071322", - "tt8101850", - "tt1734192", - "tt0451461", - "tt2734532", - "tt3582458", - "tt5117072", - "tt1731601", - "tt6926044", - "tt8566938", - "tt7913564", - "tt7644680", - "tt6692188", - "tt0460627", - "tt8543080", - "tt3636914", - "tt0898266", - "tt6063716", - "tt4477976", - "tt7334894", - "tt5335658", - "tt8567856", - "tt1379164", - "tt5777020", - "tt5871246", - "tt3279494", - "tt4378376", - "tt1930123", - "tt8668706", - "tt6143796", - "tt3688530", - "tt3141172", - "tt8115666", - "tt6027096", - "tt0090390", - "tt11063952", - "tt1725902", - "tt2558662", - "tt4457140", - "tt5815282", - "tt4592410", - "tt3516878", - "tt3952774", - "tt2546024", - "tt7345380", - "tt6881158", - "tt6328652", - "tt1728102", - "tt0842904", - "tt4061080", - "tt8923396", - "tt7741830", - "tt5376864", - "tt2758692", - "tt0072506", - "tt4641870", - "tt8304608", - "tt2375692", - "tt1710308", - "tt10394770", - "tt4635282", - "tt5000634", - "tt7374508", - "tt2191567", - "tt7491974", - "tt6027168", - "tt6926280", - "tt4523638", - "tt4587946", - "tt5020352", - "tt1183335", - "tt0903747", - "tt3228904", - "tt7498290", - "tt1551632", - "tt5707802", - "tt2741602", - "tt7134908", - "tt3480144", - "tt8159596", - "tt0758737", - "tt1189346", - "tt9637536", - "tt1587669", - "tt0379623", - "tt4158012", - "tt6282620", - "tt5620962", - "tt0367279", - "tt1843678", - "tt10267798", - "tt9418572", - "tt7424250", - "tt7738290", - "tt5665732", - "tt10183688", - "tt1497563", - "tt2294227", - "tt4160686", - "tt3163562", - "tt7632608", - "tt7161218", - "tt1842793", - "tt8429752", - "tt0086791", - "tt6819600", - "tt6343514", - "tt9184970", - "tt9169658", - "tt3768572", - "tt2139371", - "tt1595860", - "tt7157248", - "tt4960916", - "tt5095238", - "tt5797220", - "tt5368542", - "tt2340036", - "tt6233538", - "tt8699270", - "tt10023306", - "tt4218824", - "tt0062583", - "tt11576960", - "tt6903230", - "tt4171176", - "tt0437745", - "tt8577458", - "tt1444382", - "tt2616280", - "tt0112095", - "tt8559538", - "tt8200004", - "tt5762118", - "tt5780516", - "tt5027882", - "tt8523042", - "tt8332438", - "tt7983796", - "tt9641192", - "tt0086815", - "tt5430288", - "tt1684910", - "tt2850332", - "tt6269142", - "tt1286039", - "tt6725736", - "tt3973786", - "tt2578560", - "tt6626676", - "tt6477194", - "tt9549930", - "tt5637798", - "tt7872986", - "tt0386950", - "tt0187636", - "tt1558128", - "tt5612866", - "tt6375720", - "tt6233618", - "tt1535715", - "tt6769236", - "tt4118466", - "tt7052394", - "tt3007640", - "tt5987842", - "tt7414406", - "tt1606375", - "tt4085584", - "tt11083450", - "tt3293184", - "tt4568130", - "tt2299207", - "tt7619858", - "tt7816792", - "tt6563112", - "tt7557574", - "tt6101574", - "tt3097642", - "tt8098164", - "tt0996614", - "tt2322784", - "tt7487358", - "tt2229167", - "tt0950701", - "tt0840094", - "tt3489236", - "tt3074646", - "tt2384811", - "tt5350248", - "tt6772336", - "tt7026436", - "tt4322056", - "tt0948538", - "tt1836037", - "tt6303080", - "tt7781934", - "tt2415958", - "tt2343137", - "tt0429305", - "tt1353056", - "tt2660806", - "tt5673912", - "tt9130692", - "tt7386598", - "tt1137462", - "tt5237932", - "tt3975368", - "tt2057880", - "tt0056777", - "tt6006350", - "tt5541800", - "tt3475734", - "tt1305826", - "tt6945708", - "tt0112130", - "tt7555000", - "tt4878612", - "tt0069658", - "tt6961912", - "tt1657563", - "tt5269594", - "tt1132290", - "tt5648202", - "tt7768840", - "tt3986586", - "tt2433738", - "tt0069557", - "tt8189054", - "tt8289930", - "tt2070791", - "tt10098498", - "tt0192774", - "tt10406934", - "tt5022298", - "tt4266120", - "tt6461726", - "tt8959860", - "tt1548331", - "tt8115582", - "tt4687882", - "tt4102726", - "tt1117552", - "tt7192290", - "tt1843675", - "tt9742936", - "tt2493352", - "tt3231564", - "tt10608354", - "tt3952746", - "tt9016022", - "tt1723816", - "tt10937632", - "tt4976512", - "tt0783328", - "tt0135733", - "tt9530782", - "tt4983204", - "tt1699748", - "tt9271466", - "tt5056408", - "tt0103405", - "tt1587000", - "tt0271894", - "tt2432822", - "tt1420152", - "tt0319931", - "tt8712204", - "tt7758552", - "tt7908628", - "tt2397379", - "tt4842406", - "tt2497834", - "tt4108134", - "tt3101352", - "tt8463186", - "tt11399844", - "tt4452630", - "tt6342012", - "tt4264304", - "tt7965440", - "tt4791440", - "tt6385540", - "tt7942804", - "tt10065930", - "tt7090918", - "tt1642620", - "tt6135682", - "tt9641008", - "tt2546866", - "tt5235950", - "tt3958022", - "tt9265682", - "tt6015820", - "tt0959086", - "tt1777715", - "tt4699982", - "tt1105469", - "tt0497079", - "tt4189022", - "tt1186356", - "tt8000638", - "tt6466972", - "tt2261227", - "tt5978570", - "tt4847092", - "tt0193676", - "tt1051220", - "tt9348692", - "tt1877889", - "tt1991564", - "tt7371868", - "tt5038276", - "tt0979432", - "tt1981558", - "tt0103524", - "tt0457229", - "tt3597660", - "tt7686464", - "tt5016504", - "tt6068620", - "tt0233041", - "tt5722298", - "tt3108438", - "tt5209274", - "tt1078267", - "tt1819654", - "tt9165444", - "tt0458290", - "tt0925266", - "tt8865058", - "tt2776888", - "tt7298596", - "tt3562366", - "tt0123338", - "tt9695266", - "tt6088922", - "tt0120949", - "tt5490630", - "tt5776730", - "tt0805978", - "tt1220111", - "tt5200330", - "tt0059968", - "tt0330251", - "tt6416312", - "tt0285331", - "tt1103987", - "tt10219330", - "tt5634988", - "tt8845428", - "tt5239494", - "tt1833296", - "tt9185110", - "tt2190731", - "tt4480608", - "tt7713450", - "tt1460205", - "tt6712476", - "tt10344526", - "tt0823333", - "tt5103758", - "tt2802008", - "tt4799404", - "tt11344038", - "tt11305746", - "tt0103491", - "tt2817246", - "tt1298827", - "tt7850154", - "tt2533174", - "tt0086661", - "tt7440274", - "tt5176246", - "tt0956036", - "tt11301384", - "tt3069894", - "tt4226226", - "tt5219012", - "tt7692572", - "tt7131688", - "tt3230780", - "tt3893044", - "tt6713768", - "tt1869152", - "tt8496508", - "tt0131664", - "tt3521074", - "tt2771780", - "tt9319680", - "tt3488298", - "tt4079926", - "tt2762564", - "tt10715172", - "tt4576052", - "tt7141916", - "tt2210101", - "tt7278862", - "tt9130788", - "tt5610210", - "tt1506332", - "tt7878864", - "tt8845196", - "tt8564914", - "tt6398232", - "tt3910690", - "tt2452242", - "tt6110430", - "tt8680902", - "tt0285370", - "tt2432604", - "tt7569592", - "tt8111476", - "tt2782710", - "tt2712612", - "tt3002598", - "tt9581768", - "tt2401525", - "tt4350804", - "tt1620950", - "tt3204810", - "tt9140108", - "tt11006714", - "tt9067976", - "tt1307823", - "tt5968748", - "tt9278032", - "tt0450897", - "tt3830558", - "tt5753856", - "tt10054588", - "tt0364784", - "tt0055683", - "tt4595498", - "tt4071576", - "tt7984802", - "tt5763680", - "tt0164289", - "tt8001366", - "tt0429455", - "tt6524440", - "tt6412478", - "tt0095678", - "tt3328268", - "tt1932308", - "tt1879599", - "tt5672036", - "tt2828514", - "tt6921524", - "tt3637900", - "tt9908860", - "tt9099368", - "tt7749176", - "tt4859164", - "tt5457178", - "tt10584792", - "tt3853494", - "tt3056472", - "tt9145372", - "tt3441810", - "tt5547946", - "tt4192782", - "tt10376904", - "tt1695360", - "tt10380934", - "tt4847134", - "tt10715202", - "tt8796068", - "tt9776008", - "tt4152216", - "tt1660673", - "tt4465472", - "tt10443972", - "tt1538296", - "tt7978912", - "tt1839683", - "tt8417946", - "tt3148266", - "tt4335742", - "tt10049610", - "tt8014176", - "tt10262752", - "tt4644822", - "tt10738706", - "tt7183282", - "tt8619822", - "tt5866252", - "tt0324679", - "tt6849940", - "tt11252544", - "tt4614532", - "tt5363766", - "tt7262218", - "tt1561756", - "tt7838238", - "tt0096563", - "tt0088512", - "tt9561862", - "tt7981052", - "tt6086974", - "tt1380596", - "tt2845786", - "tt8893550", - "tt8686106", - "tt3289340", - "tt2668178", - "tt1043714", - "tt4602768", - "tt1956017", - "tt6917254", - "tt1388782", - "tt10327412", - "tt10691888", - "tt4591390", - "tt3503520", - "tt11203896", - "tt8560884", - "tt9204142", - "tt3986390", - "tt0222619", - "tt4998350", - "tt1534083", - "tt8382834", - "tt9486226", - "tt0424600", - "tt1645200", - "tt8842356", - "tt0056751", - "tt9741272", - "tt5706996", - "tt7239028", - "tt5214372", - "tt7603386", - "tt3645318", - "tt7841526", - "tt3689584", - "tt8144760", - "tt9578468", - "tt3455408", - "tt3868848", - "tt2294189", - "tt4459206", - "tt4511898", - "tt1417834", - "tt7817340", - "tt6834076", - "tt0103469", - "tt8425346", - "tt4789300", - "tt4484722", - "tt2380303", - "tt3920596", - "tt4655480", - "tt1479978", - "tt6714408", - "tt6997450", - "tt0370194", - "tt5765938", - "tt1828238", - "tt0068069", - "tt5790102", - "tt7412482", - "tt2742174", - "tt7298976", - "tt7356518", - "tt5050114", - "tt8965666", - "tt6734482", - "tt3018878", - "tt2258904", - "tt8201924", - "tt1942919", - "tt1933073", - "tt2527680", - "tt5099222", - "tt0851851", - "tt10312964", - "tt2182229", - "tt9117054", - "tt8845170", - "tt11168226", - "tt6538034", - "tt1520150", - "tt5342844", - "tt3952194", - "tt6484002", - "tt4033696", - "tt0299368", - "tt0475784", - "tt2076610", - "tt3216868", - "tt7967262", - "tt0306414", - "tt3855058", - "tt6597216", - "tt1219817", - "tt6819260", - "tt3713810", - "tt1100959", - "tt4364202", - "tt0081873", - "tt8421350", - "tt0083452", - "tt5339440", - "tt8233142", - "tt1493923", - "tt2217759", - "tt8116380", - "tt5840122", - "tt6808334", - "tt8974594", - "tt1843230", - "tt9104172", - "tt4478002", - "tt4597870", - "tt9336906", - "tt2188249", - "tt1353281", - "tt11833446", - "tt5137338", - "tt8000674", - "tt3869122", - "tt11444082", - "tt8201502", - "tt5594490", - "tt7845644", - "tt0914829", - "tt0902076", - "tt2012511", - "tt1695353", - "tt6467568", - "tt2289131", - "tt4777140", - "tt6897014", - "tt8879238", - "tt0118300", - "tt0941372", - "tt5722214", - "tt1118697", - "tt7768092", - "tt2059031", - "tt1714204", - "tt5834198", - "tt9081930", - "tt0465353", - "tt7622902", - "tt0063929", - "tt6877370", - "tt7587890", - "tt10608564", - "tt3061046", - "tt1127876", - "tt5541338", - "tt5650574", - "tt4015216", - "tt2399794", - "tt1433495", - "tt8413062", - "tt3501584", - "tt3070014", - "tt3231022", - "tt1530541", - "tt0071050", - "tt2242910", - "tt9381622", - "tt8285922", - "tt1954332", - "tt3449528", - "tt10274462", - "tt3012160", - "tt7853026", - "tt1871731", - "tt1786203", - "tt6760366", - "tt5687446", - "tt1595680", - "tt7616752", - "tt10895588", - "tt8888210", - "tt1978940", - "tt10038720", - "tt9247490", - "tt1229401", - "tt2337840", - "tt0078622", - "tt1409055", - "tt7984324", - "tt6843558", - "tt3528306", - "tt3971974", - "tt7720790", - "tt3551796", - "tt4555364", - "tt7708956", - "tt5951152", - "tt4235048", - "tt5226884", - "tt2446726", - "tt6823138", - "tt5694248", - "tt1821877", - "tt8923854", - "tt4696944", - "tt5060048", - "tt4531728", - "tt2520512", - "tt0106079", - "tt0306274", - "tt5172468", - "tt6852582", - "tt8725166", - "tt5924572", - "tt1503519", - "tt5459566", - "tt0071007", - "tt3781836", - "tt4508902", - "tt0092355", - "tt5439480", - "tt3322310", - "tt10637964", - "tt7042146", - "tt5646172", - "tt8049666", - "tt9184592", - "tt4223968", - "tt8021824", - "tt0076984", - "tt6645582", - "tt11024084", - "tt0115215", - "tt4676574", - "tt0427042", - "tt0165042", - "tt8498114", - "tt0320022", - "tt10977486", - "tt2085059", - "tt7721986", - "tt0369081", - "tt8526988", - "tt2902088", - "tt2769470", - "tt8995604", - "tt1536749", - "tt6468322", - "tt1822448", - "tt7444776", - "tt1587678", - "tt8005176", - "tt4210666", - "tt5141658", - "tt0841928", - "tt1936532", - "tt7221388", - "tt1442462", - "tt6459472", - "tt7050084", - "tt0475043", - "tt4878326", - "tt10375354", - "tt0098800", - "tt1064899", - "tt7492116", - "tt5583410", - "tt4313960", - "tt1279972", - "tt6483832", - "tt2306299", - "tt7651892", - "tt4947580", - "tt5864498", - "tt5785770", - "tt9170584", - "tt4388486", - "tt1685471", - "tt5615700", - "tt5788814", - "tt5726906", - "tt0108757", - "tt7446826", - "tt8427140", - "tt0387764", - "tt6410966", - "tt8785514", - "tt10364808", - "tt0429434", - "tt4406248", - "tt1508238", - "tt9548664", - "tt8001036", - "tt8005322", - "tt0491758", - "tt6478318", - "tt6286394", - "tt6287492", - "tt5135336", - "tt3334148", - "tt2071645", - "tt1295036", - "tt6949590", - "tt7246394", - "tt1582457", - "tt6856620", - "tt3300126", - "tt1885855", - "tt0324692", - "tt7603564", - "tt5015548", - "tt8681362", - "tt2751074", - "tt5607970", - "tt2009776", - "tt9256586", - "tt3453512", - "tt9446688", - "tt6416262", - "tt0370053", - "tt5820976", - "tt8036816", - "tt0348914", - "tt4605814", - "tt1611787", - "tt5699846", - "tt10167284", - "tt1450143", - "tt1117667", - "tt7614908", - "tt3952222", - "tt3729898", - "tt8517780", - "tt0493093", - "tt0077097", - "tt0096697", - "tt4630676", - "tt6416316", - "tt3791516", - "tt3581654", - "tt5934392", - "tt1375710", - "tt5707408", - "tt9174582", - "tt1586914", - "tt2185885", - "tt1489097", - "tt2727600", - "tt0276656", - "tt9644058", - "tt5789958", - "tt1173427", - "tt4209256", - "tt11474008", - "tt5788748", - "tt3012184", - "tt5827228", - "tt6643540", - "tt5645790", - "tt4192650", - "tt4781350", - "tt4647734", - "tt7293158", - "tt1743275", - "tt0870973", - "tt3923774", - "tt1325113", - "tt10233448", - "tt2400391", - "tt1592154", - "tt8961652", - "tt1582454", - "tt3574152", - "tt3571848", - "tt0264234", - "tt6905508", - "tt2980110", - "tt6846022", - "tt7150060", - "tt3228420", - "tt5973720", - "tt1615919", - "tt3069720", - "tt3551966", - "tt8914684", - "tt11189248", - "tt5973164", - "tt0904208", - "tt4061482", - "tt3315020", - "tt6059726", - "tt8911552", - "tt2964642", - "tt5568740", - "tt1839417", - "tt3247786", - "tt3105674", - "tt7661472", - "tt5705192", - "tt5793948", - "tt4280606", - "tt1826940", - "tt8594028", - "tt5396394", - "tt3906732", - "tt3157232", - "tt7626764", - "tt2914762", - "tt1553644", - "tt2329077", - "tt1749056", - "tt4578474", - "tt6980438", - "tt0281491", - "tt2163354", - "tt4370596", - "tt8891990", - "tt2740518", - "tt5075360", - "tt3277670", - "tt2578508", - "tt1252370", - "tt0384766", - "tt4730064", - "tt8839578", - "tt4951098", - "tt7370908", - "tt9780442", - "tt1170858", - "tt5149528", - "tt0118266", - "tt7217498", - "tt2060305", - "tt0484082", - "tt3889094", - "tt10016814", - "tt5030558", - "tt1941774", - "tt8463714", - "tt0396347", - "tt3095080", - "tt6396094", - "tt3337194", - "tt10069398", - "tt6881870", - "tt10704300", - "tt4635276", - "tt1626038", - "tt5459618", - "tt11122204", - "tt11024028", - "tt8129694", - "tt5734140", - "tt4082744", - "tt2126154", - "tt6826108", - "tt7252220", - "tt5095514", - "tt0142032", - "tt0135095", - "tt8261918", - "tt4565380", - "tt7956274", - "tt0377156", - "tt1694423", - "tt8824648", - "tt4443898", - "tt8870610", - "tt4820370", - "tt2097386", - "tt11861362", - "tt6953936", - "tt8332130", - "tt10773420", - "tt9826984", - "tt2641254", - "tt6283636", - "tt3967028", - "tt3636094", - "tt6129912", - "tt8741648", - "tt8074474", - "tt0168391", - "tt1205793", - "tt11092086", - "tt11239552", - "tt8390918", - "tt9696162", - "tt8068900", - "tt0115317", - "tt8078816", - "tt10098620", - "tt11833388", - "tt3243098", - "tt10141612", - "tt10648730", - "tt0329476", - "tt9308346", - "tt9815502", - "tt8619594", - "tt9905660", - "tt11819198", - "tt1275472", - "tt11246974", - "tt8242904", - "tt11891220", - "tt10623714", - "tt6289504", - "tt11983342", - "tt7050996", - "tt12080818", - "tt9130542", - "tt10549212", - "tt10525048", - "tt6898698", - "tt11685264", - "tt3914520", - "tt11829330", - "tt2835830", - "tt11857512", - "tt10228230", - "tt2203252", - "tt10394778", - "tt5813208", - "tt11823088", - "tt2244001", - "tt1794050", - "tt1102732", - "tt8403664", - "tt6950460", - "tt8266048", - "tt0364865", - "tt7020712", - "tt10088086", - "tt9625944", - "tt10366494", - "tt12093796", - "tt11266702", - "tt6251076", - "tt11398870", - "tt11547684", - "tt9177338", - "tt0083466", - "tt11958942", - "tt9244556", - "tt9059594", - "tt5993484", - "tt3365456", - "tt3072988", - "tt3909706", - "tt10846750", - "tt2650536", - "tt3775262", - "tt3027538", - "tt8741290", - "tt12030356", - "tt8236528", - "tt9041792", - "tt2834032", - "tt1705096", - "tt3852258", - "tt1929543", - "tt11097072", - "tt9018490", - "tt3147968", - "tt0368730", - "tt0928173", - "tt5467498", - "tt11929804", - "tt9900092", - "tt1374983", - "tt11460744", - "tt10726356", - "tt9015252", - "tt8771910", - "tt10370952", - "tt11815958", - "tt2842614", - "tt11193832", - "tt3239918", - "tt7862544", - "tt10036104", - "tt6357262", - "tt8000970", - "tt1393908", - "tt10293938", - "tt6000432", - "tt9812788", - "tt9348718", - "tt6374258", - "tt1752127", - "tt12004280", - "tt0379632", - "tt0309141", - "tt1517749", - "tt8991740", - "tt8045468", - "tt8856340", - "tt2170392", - "tt1471868", - "tt12098550", - "tt1996620", - "tt11056000", - "tt8139666", - "tt7694276", - "tt12018426", - "tt6040512", - "tt6352754", - "tt9642982", - "tt2286877", - "tt11718720", - "tt0046658", - "tt8594528", - "tt6139710", - "tt2795864", - "tt2492484", - "tt8667956", - "tt2197519", - "tt8452334", - "tt10311562", - "tt2364322", - "tt2724068", - "tt0312081", - "tt7207430", - "tt4547656", - "tt0098674", - "tt11969746", - "tt10589968", - "tt9165830", - "tt6053512", - "tt8160890", - "tt9164986", - "tt11098768", - "tt9357248", - "tt10437218", - "tt2477858", - "tt10814382", - "tt11633010", - "tt8962394", - "tt11958922", - "tt9780434", - "tt9077184", - "tt1592254", - "tt9530156", - "tt4883194", - "tt4201628", - "tt9397484", - "tt10050618", - "tt10930958", - "tt1419888", - "tt0830900", - "tt6150252", - "tt11783536", - "tt1794595", - "tt10375742", - "tt2527282", - "tt3540374", - "tt7056766", - "tt6612200", - "tt10918826", - "tt6988884", - "tt4993722", - "tt5125400", - "tt8089592", - "tt11818408", - "tt2297810", - "tt3693414", - "tt11347692", - "tt3615474", - "tt3141190", - "tt1726832", - "tt3184674", - "tt9615340", - "tt2968430", - "tt11324616", - "tt11330500", - "tt10394790", - "tt2634230", - "tt5078860", - "tt6435118", - "tt10383558", - "tt11271956", - "tt7070302", - "tt11867592", - "tt3343582", - "tt11829340", - "tt9448006", - "tt11183572", - "tt11170862", - "tt9815454", - "tt0879688", - "tt5252734", - "tt9059820", - "tt5766086" -] \ No newline at end of file diff --git a/scraper/scrapers/rutor/rutor_api.js b/scraper/scrapers/rutor/rutor_api.js deleted file mode 100644 index 2bb9175..0000000 --- a/scraper/scrapers/rutor/rutor_api.js +++ /dev/null @@ -1,207 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const decode = require('magnet-uri'); -const { defaultOptionsWithProxy } = require('../../lib/requestHelper'); - -const baseUrl = 'http://www.rutor.info'; -const defaultTimeout = 10000; - -const Categories = { - ALL: '0', - FOREIGN_FILMS: '1', - RUSSIAN_FILMS: '5', - SCIENCE_FILMS: '12', - FOREIGN_SERIES: '4', - RUSSIAN_SERIES: '16', - RUSSIAN_TV: '6', - RUSSIAN_ANIMATION: '7', - ANIME: '10', - FOREIGN_RELEASES: '17' -}; - -function torrent(torrentId, config = {}, retries = 2, error = null) { - if (!torrentId || retries === 0) { - return Promise.reject(error || new Error(`Failed ${torrentId} search`)); - } - - return singleRequest(`${baseUrl}/torrent/${torrentId}`) - .then((body) => parseTorrentPage(body, torrentId)) - .catch((err) => torrent(torrentId, config, retries - 1, err)); -} - -function search(query, retries = 2, error = null) { - if (retries === 0) { - return Promise.reject(error || new Error(`Failed browse request`)); - } - - return singleRequest(`${baseUrl}/search/0/0/0/0/${encodeURIComponent(query)}`) - .then((body) => parseTableBody(body)) - .catch((err) => search(query, retries - 1, err)); -} - -function browse(config = {}, retries = 2, error = null) { - if (retries === 0) { - return Promise.reject(error || new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - - return singleRequest(`${baseUrl}/browse/${page - 1}/${category}/0/0`) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1, err)); -} - -function files(torrentId) { - return singleRequest(`${baseUrl}/descriptions/${torrentId}.files`) - .then((body) => parseFiles(body)); -} - -function singleRequest(requestUrl) { - const options = { ...defaultOptionsWithProxy(), timeout: defaultTimeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl} with status ${response.status}`); - } else if (body.includes('Access Denied')) { - console.log(`Access Denied: ${requestUrl}`); - throw new Error(`Access Denied: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden') || - body.includes('Origin DNS error')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = $('#index').find('tr:not(.backgr)').map((i, elem) => { - const row = $(elem).find('td'); - const links = $(row[1]).find('a'); - const peers = $(row[row.length - 1]); - const magnetLink = $(links[1]).attr('href'); - - return { - title: $(links[2]).text(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - torrentLink: $(links[0]).attr('href'), - torrentId: $(links[2]).attr('href').match(/torrent\/(\d+)/)[1], - seeders: parseInt(peers.find('.green').text()), - leechers: parseInt(peers.find('.red').text()), - uploadDate: parseRussianDate($(row[0]).text()), - size: $(row[row.length - 2]).html().replace(' ', ' '), - } - }).get(); - - resolve(torrents); - }); -} - -function parseTorrentPage(body, torrentId) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const rows = $('#details > tr') - const details = $(rows[0]).find('td:nth-of-type(2)'); - const magnetLink = $('#download a:nth-of-type(1)').attr('href'); - const imdbIdMatch = details.html().match(/imdb\.com\/title\/(tt\d+)/i); - - const parsedTorrent = { - title: $('#all h1').first().text(), - torrentId: torrentId, - infoHash: decode(magnetLink).infoHash, - trackers: Array.from(new Set(decode(magnetLink).tr)).join(','), - magnetLink: magnetLink, - torrentLink: $('#download a:nth-of-type(2)').attr('href'), - seeders: parseInt($(rows[rows.length - 8]).find('td:nth-of-type(2)').first().text(), 10), - category: $('tr:contains(\'Категория\') a').first().attr('href').match(/\/([\w-]+)$/)[1], - languages: parseLanguages(details.text()), - size: parseSize($(rows[rows.length - 4]).find('td:nth-of-type(2)').text()), - uploadDate: parseDate($(rows[rows.length - 5]).find('td:nth-of-type(2)').first().text()), - imdbId: imdbIdMatch && imdbIdMatch[1] - }; - resolve(parsedTorrent); - }); -} - -function parseFiles(body) { - if (!body) { - throw new Error("No files in the body"); - } - return body.split('\n') - .map((item) => item.match(/([^<]+)<\/td>/g).slice(1)) - .map((item, index) => ({ - fileIndex: index, - name: item[0].replace(/^.+\//g, ''), - path: item[0].replace(/^.+\//, ''), - size: parseSize(item[1]) - })); -} - -function parseDate(dateString) { - const preparedDate = dateString.replace(/\s\(.*\)/, '') - return moment(preparedDate, 'DD-MM-YYYY HH:mm:ss').toDate(); -} - -const russianMonths = { - 'Янв': 'Jan', - 'Фев': 'Feb', - 'Мар': 'Mar', - 'Апр': 'Apr', - 'Май': 'May', - 'Июн': 'Jun', - 'Июл': 'Jul', - 'Авг': 'Aug', - 'Сен': 'Sep', - 'Окт': 'Oct', - 'Ноя': 'Nov', - 'Дек': 'Dec' -}; - -function parseRussianDate(dateString) { - const rusMonth = Object.keys(russianMonths).find(month => dateString.includes(month)); - const preparedDate = dateString.trim().replace(rusMonth, russianMonths[rusMonth]).replace(/\u00a0/g, ' '); - return moment(preparedDate, 'DD MMM YY').toDate(); -} - -function parseSize(sizeString) { - return parseInt(sizeString.match(/\((\d+) Bytes\)/)[1], 10); -} - -const languageMatchers = { - 'russian': /(?:Язык|Звук|Аудио|audio|language).*(russian|\brus?\b|[Рр]усский)/i, - 'english': /(?:Язык|Звук|Аудио|audio|language).*(english|\beng?\b|[Аа]нглийский)/i, - 'ukrainian': /(?:Язык|Звук|Аудио|audio|language).*(ukrainian|\bukr\b|украинский)/i, - 'french': /(?:Язык|Звук|Аудио|audio|language).*(french|\bfr\b|французский)/i, - 'spanish': /(?:Язык|Звук|Аудио|audio|language).*(spanish|\bspa\b|испанский)/i, - 'italian': /(?:Язык|Звук|Аудио|audio|language).*(italian|\bita\b|итальянский)/i, - 'german': /(?:Язык|Звук|Аудио|audio|language).*(german|\bger\b|Немецкий)/i, - 'korean': /(?:Язык|Звук|Аудио|audio|language).*(korean|Корейский)/i, - 'arabic': /(?:Язык|Звук|Аудио|audio|language).*(arabic|Арабский)/i, - 'portuguese': /(?:Язык|Звук|Аудио|audio|language).*(portuguese|Португальский)/i, - 'japanese': /(?:Язык|Звук|Аудио|audio|language).*(japanese|\bjap\b|\bjp\b|[Яя]понский)/i, -} - -function parseLanguages(details) { - const subsInfoMatch = details.match(/\r?\n(Text|Текст)(?:\s?#?\d{1,2})?\r?\n/i); - const detailsPart = subsInfoMatch ? details.substring(0, subsInfoMatch.index) : details; - const matchedLanguages = Object.keys(languageMatchers).filter(lang => languageMatchers[lang].test(detailsPart)); - const languages = Array.from(new Set(['russian'].concat(matchedLanguages))); - return languages.length > 4 ? 'multi-audio' : languages.join(','); -} - -module.exports = { torrent, browse, search, Categories }; diff --git a/scraper/scrapers/rutor/rutor_scraper.js b/scraper/scrapers/rutor/rutor_scraper.js deleted file mode 100644 index e7bf485..0000000 --- a/scraper/scrapers/rutor/rutor_scraper.js +++ /dev/null @@ -1,133 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const { parse } = require('parse-torrent-title'); -const rutor = require('./rutor_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'Rutor'; -const TYPE_MAPPING = { - 'kino': Type.MOVIE, - 'nashe_kino': Type.MOVIE, - 'nauchno_popularnoe': Type.MOVIE, - 'inostrannoe': Type.MOVIE, - 'seriali': Type.SERIES, - 'nashi_seriali': Type.SERIES, - 'tv': Type.SERIES, - 'multiki': Type.MOVIE, - 'anime': Type.ANIME -}; - -const api_limiter = new Bottleneck({ maxConcurrent: 1, minTime: 5000 }); -const api_entry_limiter = new Bottleneck({ maxConcurrent: 1, minTime: 2500 }); -const limiter = new Bottleneck({ maxConcurrent: 10 }); -const allowedCategories = [ - rutor.Categories.FOREIGN_FILMS, - rutor.Categories.FOREIGN_RELEASES, - rutor.Categories.RUSSIAN_FILMS, - rutor.Categories.FOREIGN_SERIES, - rutor.Categories.RUSSIAN_SERIES, - rutor.Categories.SCIENCE_FILMS, - rutor.Categories.RUSSIAN_ANIMATION, - rutor.Categories.ANIME -]; - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - // const ids = [ - // '637799' - // ]; - // return Promise.all(ids.map(id => api_entry_limiter.schedule(() => rutor.torrent(id)) - // .then(torrent => processTorrentRecord(torrent)))) - // .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return Promise.resolve([]); -} - -async function scrapeLatestTorrents() { - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return api_limiter.schedule(() => rutor.browse({ category, page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < getMaxPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - const isOld = moment(record.uploadDate).isBefore(moment().subtract(18, 'month')); - if (record.seeders === 0 && isOld) { - console.log(`Skipping old unseeded torrent [${record.infoHash}] ${record.title}`) - return record; - } - - const foundTorrent = await api_entry_limiter.schedule(() => rutor.torrent(record.torrentId).catch(() => undefined)); - - if (!foundTorrent || !TYPE_MAPPING[foundTorrent.category]) { - return Promise.resolve(`${NAME}: Invalid torrent record: ${record.torrentId}`); - } - if (!foundTorrent.imdbId && disallowWithoutImdbId(foundTorrent)) { - return Promise.resolve(`${NAME}: No imdbId defined: ${record.torrentId}`); - } - - const torrent = { - provider: NAME, - infoHash: foundTorrent.infoHash, - torrentId: foundTorrent.torrentId, - torrentLink: foundTorrent.torrentLink, - trackers: foundTorrent.trackers, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - size: foundTorrent.size, - seeders: foundTorrent.seeders, - uploadDate: foundTorrent.uploadDate, - imdbId: foundTorrent.imdbId, - languages: foundTorrent.languages || undefined, - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -function getMaxPage(category) { - switch (category) { - case rutor.Categories.FOREIGN_FILMS: - case rutor.Categories.FOREIGN_SERIES: - return 2; - default: - return 1; - } -} - -function disallowWithoutImdbId(torrent) { - if (['kino', 'anime'].includes(torrent.category)) { - return false; // allow to search foreign movie and anime ids via search - } - // allow to search id for non russian series titles via search - return !(torrent.category === 'seriali' && !parse(torrent.title).title.match(/[\u0400-\u04ff]/i)); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/scraperHelper.js b/scraper/scrapers/scraperHelper.js deleted file mode 100644 index 44aa0d0..0000000 --- a/scraper/scrapers/scraperHelper.js +++ /dev/null @@ -1,41 +0,0 @@ -function isPtDubbed(name) { - return name.toLowerCase().match(/dublado|dual|nacional|multi/); -} - -function sanitizePtName(name) { - return name - .replace(/(.*)\b(\d{3,4}P)\b(?!.*\d{3,4}[Pp])(.*)/, '$1$3 $2') // add resolution to the end if missing - .replace(/^[\[{]?(?:ACESSE.*|WWW\.)?[A-Z]+\.(COM|NET|ORG|TO|TV|ME)\b\s*[-\]}]+[\s.]*/i, '') // replace watermarks - .replace(/^(\d*(?:\.\d{1,2})?(?:[4A-Z-]{3,}|P)[-.]+)+/, '') // replace metadata prefixes - .replace(/^[\[{]?(?:ACESSE.*|WWW\.)?[A-Z]+\.(COM|NET|ORG|TO|TV|ME)\b\s*[-\]}]+[\s.]*/i, '') // replace watermarks2 - .replace(/^(COM|NET|ORG|TO|TV|ME)\b\s*-+[\s.]*/, '') // replace dangling site endings - .trim(); -} - -function sanitizePtOriginalName(name) { - return name.trim().replace(/S\d+$|\d.\s?[Tt]emporada/, ''); -} - -function sanitizePtLanguages(languages) { - return languages - .replace(/��/g, 'ê') - .replace(/ /g, '') - .trim(); -} - -function parseSize(sizeText) { - if (!sizeText) { - return undefined; - } - let scale = 1; - if (/Gi?B|Go/.test(sizeText)) { - scale = 1024 * 1024 * 1024 - } else if (/Mi?B|Mo/.test(sizeText)) { - scale = 1024 * 1024; - } else if (/[Kk]i?B|Ko/.test(sizeText)) { - scale = 1024; - } - return Math.floor(parseFloat(sizeText.replace(/[',]/g, '')) * scale); -} - -module.exports = { parseSize, isPtDubbed, sanitizePtName, sanitizePtOriginalName, sanitizePtLanguages } \ No newline at end of file diff --git a/scraper/scrapers/thepiratebay/thepiratebay_api.js b/scraper/scrapers/thepiratebay/thepiratebay_api.js deleted file mode 100644 index 4ff6a42..0000000 --- a/scraper/scrapers/thepiratebay/thepiratebay_api.js +++ /dev/null @@ -1,129 +0,0 @@ -const axios = require('axios'); -const { escapeHTML } = require('../../lib/metadata'); - -const baseUrl = 'https://apibay.org'; -const timeout = 5000; - -const Categories = { - AUDIO: { - ALL: 100, - MUSIC: 101, - AUDIO_BOOKS: 102, - SOUND_CLIPS: 103, - FLAC: 104, - OTHER: 199 - }, - VIDEO: { - ALL: 200, - MOVIES: 201, - MOVIES_DVDR: 202, - MUSIC_VIDEOS: 203, - MOVIE_CLIPS: 204, - TV_SHOWS: 205, - HANDHELD: 206, - MOVIES_HD: 207, - TV_SHOWS_HD: 208, - MOVIES_3D: 209, - OTHER: 299 - }, - APPS: { - ALL: 300, - WINDOWS: 301, - MAC: 302, - UNIX: 303, - HANDHELD: 304, - IOS: 305, - ANDROID: 306, - OTHER_OS: 399 - }, - GAMES: { - ALL: 400, - PC: 401, - MAC: 402, - PSx: 403, - XBOX360: 404, - Wii: 405, - HANDHELD: 406, - IOS: 407, - ANDROID: 408, - OTHER: 499 - }, - PORN: { - ALL: 500, - MOVIES: 501, - MOVIES_DVDR: 502, - PICTURES: 503, - GAMES: 504, - MOVIES_HD: 505, - MOVIE_CLIPS: 506, - OTHER: 599 - }, - OTHER: { - ALL: 600, - E_BOOKS: 601, - COMICS: 602, - PICTURES: 603, - COVERS: 604, - PHYSIBLES: 605, - OTHER: 699 - } -}; - -function torrent(torrentId, retries = 2) { - if (!torrentId) { - return Promise.reject(new Error('No valid torrentId provided')); - } - - return _request(`t.php?id=${torrentId}`) - .then(result => toTorrent(result)) - .catch(error => retries ? torrent(torrentId, retries - 1) : Promise.reject(error)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword) { - return Promise.reject(new Error('No valid keyword provided')); - } - const q = keyword; - const cat = config.category || Categories.VIDEO.ALL; - - return _request(`q.php?q=${q}&cat=${cat}`) - .then(results => results.map((result) => toTorrent(result))) - .catch(error => retries ? search(keyword, config, retries - 1) : Promise.reject(error)); -} - -function browse(config = {}, retries = 2) { - const category = config.category || 0; - const page = config.page - 1 || 0; - - return _request(`q.php?q=category:${category}:${page}`) - .then(results => results.map((result) => toTorrent(result))) - .catch(error => retries ? browse(config, retries - 1) : Promise.reject(error)); -} - -async function _request(endpoint) { - const url = `${baseUrl}/${endpoint}`; - return axios.get(url, { timeout: timeout }) - .then(response => { - if (typeof response.data === 'object') { - return response.data; - } - return Promise.reject(`Unexpected response body`); - }); -} - -function toTorrent(result) { - return { - torrentId: result.id, - name: escapeHTML(result.name), - infoHash: result.info_hash.toLowerCase(), - size: parseInt(result.size), - seeders: parseInt(result.seeders), - leechers: parseInt(result.leechers), - subcategory: parseInt(result.category), - uploadDate: new Date(result.added * 1000), - imdbId: result.imdb || undefined, - filesCount: result.num_files && parseInt(result.num_files) || undefined - }; -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/thepiratebay/thepiratebay_dump_scraper.js b/scraper/scrapers/thepiratebay/thepiratebay_dump_scraper.js deleted file mode 100644 index 8754298..0000000 --- a/scraper/scrapers/thepiratebay/thepiratebay_dump_scraper.js +++ /dev/null @@ -1,175 +0,0 @@ -const axios = require('axios'); -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const { ungzip } = require('node-gzip'); -const LineByLineReader = require('line-by-line'); -const fs = require('fs'); -const thepiratebay = require('./thepiratebay_api.js'); -const bing = require('nodejs-bing'); -const { Type } = require('../../lib/types'); -const { escapeHTML } = require('../../lib/metadata'); -const { createTorrentEntry, createSkipTorrentEntry, getStoredTorrentEntry } = require('../../lib/torrentEntries'); - -const NAME = 'ThePirateBay'; -const CSV_FILE_PATH = '/tmp/tpb_dump.csv'; - -const limiter = new Bottleneck({ maxConcurrent: 40 }); - -async function scrape() { - const lastDump = { updatedAt: 2147000000 }; - //const checkPoint = moment('2016-06-17 00:00:00', 'YYYY-MMM-DD HH:mm:ss').toDate(); - //const lastDump = await thepiratebay.dumps().then((dumps) => dumps.sort((a, b) => b.updatedAt - a.updatedAt)[0]); - const checkPoint = 0; - - if (lastDump) { - console.log(`starting to scrape tpb dump: ${JSON.stringify(lastDump)}`); - await downloadDump(lastDump); - - let entriesProcessed = 0; - const lr = new LineByLineReader(CSV_FILE_PATH); - lr.on('line', (line) => { - if (line.includes("#ADDED")) { - return; - } - if (entriesProcessed % 1000 === 0) { - console.log(`Processed ${entriesProcessed} entries`); - } - if (entriesProcessed <= checkPoint) { - entriesProcessed++; - return; - } - - const row = line.match(/(?<=^|;)(".*"|[^;]+)(?=;|$)/g); - if (row.length !== 4) { - console.log(`Invalid row: ${line}`); - return; - } - const torrent = { - uploadDate: moment(row[0], 'YYYY-MMM-DD HH:mm:ss').toDate(), - infoHash: Buffer.from(row[1], 'base64').toString('hex'), - title: escapeHTML(row[2]) - .replace(/^"|"$/g, '') - .replace(/&#?\w{2,6};/g, ' ') - .replace(/\s+/g, ' ') - .trim(), - size: parseInt(row[3], 10) - }; - - if (!limiter.empty()) { - lr.pause() - } - - limiter.schedule(() => processTorrentRecord(torrent) - .catch((error) => console.log(`failed ${torrent.title} due: ${error}`))) - .then(() => limiter.empty()) - .then((empty) => empty && lr.resume()) - .then(() => entriesProcessed++); - }); - lr.on('error', (err) => { - console.log(err); - }); - lr.on('end', () => { - console.log(`finished to scrape tpb dump: ${JSON.stringify(lastDump)}!`); - }); - } -} - -const allowedCategories = [ - thepiratebay.Categories.VIDEO.MOVIES, - thepiratebay.Categories.VIDEO.MOVIES_HD, - thepiratebay.Categories.VIDEO.MOVIES_DVDR, - thepiratebay.Categories.VIDEO.MOVIES_3D, - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; -const seriesCategories = [ - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; - -async function processTorrentRecord(record) { - if (await getStoredTorrentEntry(record)) { - return; - } - - const torrentFound = await findTorrent(record); - - if (!torrentFound || !allowedCategories.includes(torrentFound.subcategory)) { - return createSkipTorrentEntry(record); - } - - const torrent = { - infoHash: torrentFound.infoHash, - provider: NAME, - torrentId: torrentFound.torrentId, - title: torrentFound.name, - size: torrentFound.size, - type: seriesCategories.includes(torrentFound.subcategory) ? Type.SERIES : Type.MOVIE, - imdbId: seriesCategories.includes(torrentFound.subcategory) && torrentFound.imdbId || undefined, - uploadDate: torrentFound.uploadDate || record.uploadDate, - seeders: torrentFound.seeders, - }; - - return createTorrentEntry(torrent); -} - -async function findTorrent(record) { - return findTorrentInSource(record) - .catch(() => findTorrentViaBing(record)); -} - -async function findTorrentInSource(record) { - let page = 0; - let torrentFound; - while (!torrentFound && page < 5) { - const torrents = await thepiratebay.search(record.title.replace(/[\W\s]+/, ' '), { page: page }); - torrentFound = torrents.filter(torrent => torrent.magnetLink.toLowerCase().includes(record.infoHash))[0]; - page = torrents.length === 0 ? 1000 : page + 1; - } - if (!torrentFound) { - return Promise.reject(new Error(`Failed to find torrent ${record.title}`)); - } - return Promise.resolve(torrentFound) - .then((torrent) => thepiratebay.torrent(torrent.torrentId) - .catch(() => thepiratebay.torrent(torrent.torrentId))); -} - -async function findTorrentViaBing(record) { - return bing.web(`${record.infoHash}`) - .then((results) => results - .find(result => result.description.includes('Direct download via magnet link') || - result.description.includes('Get this torrent'))) - .then((result) => { - if (!result) { - console.warn(`Failed to find torrent ${record.title}`); - return Promise.resolve(undefined); - } - return result.link.match(/torrent\/(\w+)\//)[1]; - }) - .then((torrentId) => torrentId && thepiratebay.torrent(torrentId)) -} - -function downloadDump(dump) { - try { - if (fs.existsSync(CSV_FILE_PATH)) { - console.log('dump file already exist...'); - return; - } - } catch (err) { - console.error(err) - } - - console.log('downloading dump file...'); - return axios.get(dump.url, { timeout: 2000, responseType: 'stream' }) - .then((response) => response.data) - .then((body) => { - console.log('unzipping dump file...'); - return ungzip(body); - }) - .then((unzipped) => { - console.log('writing dump file...'); - return fs.promises.writeFile(CSV_FILE_PATH, unzipped); - }) -} - -module.exports = { scrape, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/thepiratebay/thepiratebay_fakes_removal.js b/scraper/scrapers/thepiratebay/thepiratebay_fakes_removal.js deleted file mode 100644 index 93917ad..0000000 --- a/scraper/scrapers/thepiratebay/thepiratebay_fakes_removal.js +++ /dev/null @@ -1,43 +0,0 @@ -const moment = require('moment'); -const { Sequelize } = require('sequelize'); -const Bottleneck = require('bottleneck'); -const thepiratebay = require('./thepiratebay_api.js'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); - -const NAME = 'ThePirateBay'; -const EMPTY_HASH = '0000000000000000000000000000000000000000'; - -const Op = Sequelize.Op; -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape() { - console.log(`Starting ${NAME} fake removal...`); - const startCreatedAt = moment().subtract(14, 'day'); - const endCreatedAt = moment(); - const whereQuery = { - provider: NAME, - type: Type.MOVIE, - createdAt: { [Op.between]: [startCreatedAt, endCreatedAt] } - }; - return repository.getTorrentsBasedOnQuery(whereQuery) - .then(torrents => { - console.log(`Checking for ${NAME} fake entries in ${torrents.length} torrents`); - return Promise.all(torrents.map(torrent => limiter.schedule(() => removeIfFake(torrent)))) - }) - .then(results => { - const removed = results.filter(result => result); - console.log(`Finished ${NAME} fake removal with ${removed.length} removals in ${results.length} torrents`); - }); -} - -async function removeIfFake(torrent) { - const tpbTorrentInfo = await thepiratebay.torrent(torrent.torrentId).catch(() => null); - if (tpbTorrentInfo && tpbTorrentInfo.infoHash === EMPTY_HASH) { - console.log(`Removing ${NAME} fake torrent [${torrent.torrentId}][${torrent.infoHash}] ${torrent.title}`); - return repository.deleteTorrent(torrent).catch(() => null); - } - return Promise.resolve(null); -} - -module.exports = { scrape, NAME }; diff --git a/scraper/scrapers/thepiratebay/thepiratebay_scraper.js b/scraper/scrapers/thepiratebay/thepiratebay_scraper.js deleted file mode 100644 index 33cc493..0000000 --- a/scraper/scrapers/thepiratebay/thepiratebay_scraper.js +++ /dev/null @@ -1,98 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const thepiratebay = require('./thepiratebay_api.js'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'ThePirateBay'; - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -const allowedCategories = [ - thepiratebay.Categories.VIDEO.MOVIES, - thepiratebay.Categories.VIDEO.MOVIES_HD, - thepiratebay.Categories.VIDEO.MOVIES_3D, - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; -const seriesCategories = [ - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - // return limiter.schedule(() => thepiratebay.torrent(torrent.torrentId)); - return Promise.resolve([]); -} - -async function scrapeLatestTorrents() { - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return thepiratebay.browse({ category, page }) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < getUntilPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - if (!record || !allowedCategories.includes(record.subcategory)) { - return Promise.resolve('Invalid torrent record'); - } - - const torrent = { - infoHash: record.infoHash, - provider: NAME, - torrentId: record.torrentId, - title: record.name.replace(/\t|\s+/g, ' '), - type: seriesCategories.includes(record.subcategory) ? Type.SERIES : Type.MOVIE, - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - imdbId: seriesCategories.includes(record.subcategory) && record.imdbId || undefined, - languages: record.languages && record.languages.trim() || undefined - }; - - return createTorrentEntry(torrent); -} - -function getUntilPage(category) { - switch (category) { - case thepiratebay.Categories.VIDEO.MOVIES_3D: - return 1; - case thepiratebay.Categories.VIDEO.TV_SHOWS: - case thepiratebay.Categories.VIDEO.TV_SHOWS_HD: - return 10; - default: - return 5; - } -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/thepiratebay/thepiratebay_unofficial_dump_scraper.js b/scraper/scrapers/thepiratebay/thepiratebay_unofficial_dump_scraper.js deleted file mode 100644 index 31e6ae1..0000000 --- a/scraper/scrapers/thepiratebay/thepiratebay_unofficial_dump_scraper.js +++ /dev/null @@ -1,112 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const LineByLineReader = require('line-by-line'); -const decode = require('magnet-uri'); -const thepiratebay = require('./thepiratebay_api.js'); -const { Type } = require('../../lib/types'); -const { createTorrentEntry, createSkipTorrentEntry, getStoredTorrentEntry } = require('../../lib/torrentEntries'); - -const NAME = 'ThePirateBay'; -const CSV_FILE_PATH = '/tmp/tpb.csv'; - -const limiter = new Bottleneck({ maxConcurrent: 40 }); - -async function scrape() { - // await processTorrentRecord({ torrentId: 26877339, category: 'Video' }); - console.log(`starting to scrape tpb dump...`); - //const checkPoint = moment('2013-06-16 00:00:00', 'YYYY-MMM-DD HH:mm:ss').toDate(); - const checkPoint = 4115000; - - let entriesProcessed = 0; - const lr = new LineByLineReader(CSV_FILE_PATH); - lr.on('line', (line) => { - if (entriesProcessed % 1000 === 0) { - console.log(`Processed ${entriesProcessed} entries`); - } - if (entriesProcessed <= checkPoint) { - entriesProcessed++; - return; - } - - const row = line.match(/(?<=^|,)(".*"|[^,]*)(?=,|$)/g); - if (row.length !== 10) { - console.log(`Invalid row: ${line}`); - return; - } - const torrent = { - torrentId: row[0], - title: row[1] - .replace(/^"|"$/g, '') - .replace(/&/g, '&') - .replace(/&\w{2,6};/g, ' ') - .replace(/\s+/g, ' ') - .trim(), - size: parseInt(row[2], 10), - category: row[4], - subcategory: row[5], - infoHash: row[7].toLowerCase() || decode(row[9]).infoHash, - magnetLink: row[9], - uploadDate: moment(row[8]).toDate(), - }; - - if (!limiter.empty()) { - lr.pause() - } - - limiter.schedule(() => processTorrentRecord(torrent) - .catch((error) => console.log(`failed ${torrent.title} due: ${error}`))) - .then(() => limiter.empty()) - .then((empty) => empty && lr.resume()) - .then(() => entriesProcessed++); - }); - lr.on('error', (err) => { - console.log(err); - }); - lr.on('end', () => { - console.log(`finished to scrape tpb dump!`); - }); -} - -const allowedCategories = [ - thepiratebay.Categories.VIDEO.MOVIES, - thepiratebay.Categories.VIDEO.MOVIES_HD, - thepiratebay.Categories.VIDEO.MOVIES_DVDR, - thepiratebay.Categories.VIDEO.MOVIES_3D, - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; -const seriesCategories = [ - thepiratebay.Categories.VIDEO.TV_SHOWS, - thepiratebay.Categories.VIDEO.TV_SHOWS_HD -]; - -async function processTorrentRecord(record) { - if (record.category !== 'Video') { - return createSkipTorrentEntry(record); - } - if (await getStoredTorrentEntry(record)) { - return; - } - - const torrentFound = await thepiratebay.torrent(record.torrentId); - - if (!torrentFound || !allowedCategories.includes(torrentFound.subcategory)) { - return createSkipTorrentEntry(record); - } - - const torrent = { - infoHash: torrentFound.infoHash, - provider: NAME, - torrentId: torrentFound.torrentId, - title: torrentFound.name, - size: torrentFound.size, - type: seriesCategories.includes(torrentFound.subcategory) ? Type.SERIES : Type.MOVIE, - imdbId: torrentFound.imdbId, - uploadDate: torrentFound.uploadDate, - seeders: torrentFound.seeders, - }; - - return createTorrentEntry(torrent); -} - -module.exports = { scrape, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/torrent9/torrent9_api.js b/scraper/scrapers/torrent9/torrent9_api.js deleted file mode 100644 index 2f435aa..0000000 --- a/scraper/scrapers/torrent9/torrent9_api.js +++ /dev/null @@ -1,119 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const decode = require('magnet-uri'); -const { parse } = require('parse-torrent-title'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { parseSize } = require("../scraperHelper"); - -const baseUrl = 'https://www.torrent9.st' -const defaultTimeout = 10000; -const pageSize = 50; - -const Categories = { - MOVIE: 'films', - TV: 'series', -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return singleRequest(`${baseUrl}/torrent/${torrentId}`) - .then((body) => parseTorrentPage(body)) - .then((torrent) => ({ torrentId, ...torrent })) - .catch((err) => { - console.warn(`Failed Torrent9 ${torrentId} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function browse(config = {}, retries = 2, error = null) { - if (retries === 0) { - return Promise.reject(error || new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - const offset = (page - 1) * pageSize + 1; - - return singleRequest(`${baseUrl}/torrents/${category}/${offset}`) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1, err)); -} - -function singleRequest(requestUrl) { - const headers = { - 'user-agent': getRandomUserAgent(), - 'accept-encoding': 'gzip, deflate', - 'accept-language': 'en-GB,en;q=0.9,en-US;q=0.8,lt;q=0.7,ar;q=0.6,fr;q=0.5,de;q=0.4' - }; - const options = { headers, timeout: defaultTimeout }; - - return axios.get(requestUrl, options) - .then(response => { - const body = response.data; - if (!body || !body.length) { - throw new Error(`No body: ${requestUrl} with status ${response.status}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('tbody tr').each((i, element) => { - const row = $(element); - const titleElement = row.find('td a'); - try { - torrents.push({ - name: titleElement.text().trim(), - torrentId: titleElement.attr('href').match(/torrent\/(.*)/)[1], - seeders: parseInt(row.find('span.seed_ok').first().text()), - }); - } catch (e) { - console.error('Failed parsing TorrentGalaxy row: ', e); - } - }); - - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const details = $('.movie-detail'); - const magnetLink = details.find('a[href^="magnet"]').first().attr('href'); - const torrentLink = details.find('div.download-btn:nth-of-type(1) a').first().attr('href'); - const name = details.find('p strong').contents().filter((_, e) => e.type === 'text').text() || $('h5, h1').text(); - const languages = parse(name).languages; - const torrent = { - title: name.trim(), - infoHash: magnetLink ? decode(magnetLink).infoHash : undefined, - magnetLink: magnetLink, - torrentLink: torrentLink ? `${baseUrl}${torrentLink}` : undefined, - seeders: parseInt(details.find('.movie-information ul:nth-of-type(1) li:nth-of-type(3)').text(), 10), - category: details.find('ul:nth-of-type(4) a').attr('href').match(/\/(\w+)$/)[1], - size: parseSize(details.find('ul:nth-of-type(2) li:nth-of-type(3)').text()), - uploadDate: moment(details.find('ul:nth-of-type(3) li:nth-of-type(3)').text(), 'DD/MM/YYYY').toDate(), - languages: languages && languages.includes('french') ? undefined : 'french', - }; - resolve(torrent); - }); -} - -module.exports = { torrent, browse, Categories }; diff --git a/scraper/scrapers/torrent9/torrent9_scraper.js b/scraper/scrapers/torrent9/torrent9_scraper.js deleted file mode 100644 index ac6fd79..0000000 --- a/scraper/scrapers/torrent9/torrent9_scraper.js +++ /dev/null @@ -1,104 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const torrent9 = require('./torrent9_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'Torrent9'; -const TYPE_MAPPING = typeMapping(); - -const api_limiter = new Bottleneck({ maxConcurrent: 1, minTime: 5000 }); -const limiter = new Bottleneck({ maxConcurrent: 10 }); -const allowedCategories = [ - torrent9.Categories.MOVIE, - torrent9.Categories.TV, -]; -const clients = [ - torrent9 -]; - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function scrapeLatestTorrents() { - const scrapeFunctions = allowedCategories - .map(category => clients.map(client => () => scrapeLatestTorrentsForCategory(client, category))) - .reduce((a, b) => a.concat(b), []); - return Promises.sequence(scrapeFunctions) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(client, category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return api_limiter.schedule(() => client.browse({ category, page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(results => Promise.all(results.map(r => limiter.schedule(() => processTorrentRecord(client, r))))) - .then(resolved => resolved.length > 0 && page < getUntilPage(category) - ? scrapeLatestTorrentsForCategory(client, category, page + 1) - : Promise.resolve([])); -} - -async function processTorrentRecord(client, record) { - if (await checkAndUpdateTorrent({ provider: NAME, torrentId: record.torrentId })) { - return record; - } - - const foundTorrent = await api_limiter.schedule(() => client.torrent(record.torrentId)).catch(() => undefined); - if (!foundTorrent || !foundTorrent.infoHash) { - console.warn(`Failed retrieving torrent ${record.torrentId}`); - return record; - } - - const torrent = { - provider: NAME, - infoHash: foundTorrent.infoHash, - magnetLink: foundTorrent.magnetLink, - torrentLink: foundTorrent.torrentLink, - torrentId: foundTorrent.torrentId, - title: foundTorrent.title, - type: TYPE_MAPPING[foundTorrent.category], - size: foundTorrent.size, - seeders: foundTorrent.seeders, - uploadDate: foundTorrent.uploadDate, - imdbId: foundTorrent.imdbId, - languages: foundTorrent.languages - }; - - if (await checkAndUpdateTorrent(torrent)) { - console.info(`Skipping torrent ${torrent.torrentId} - [${torrent.infoHash}] ${torrent.title}`); - return torrent; - } - - return createTorrentEntry(torrent).then(() => torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[torrent9.Categories.MOVIE] = Type.MOVIE; - mapping[torrent9.Categories.TV] = Type.SERIES; - return mapping; -} - -function getUntilPage(category) { - if (category === torrent9.Categories.TV) { - return 2; - } - return 1; -} - -module.exports = { scrape, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/torrent9/torrent9v2_api.js b/scraper/scrapers/torrent9/torrent9v2_api.js deleted file mode 100644 index 1faef38..0000000 --- a/scraper/scrapers/torrent9/torrent9v2_api.js +++ /dev/null @@ -1,124 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const decode = require('magnet-uri'); -const { parse } = require('parse-torrent-title'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { parseSize } = require("../scraperHelper"); - -const baseUrl = 'https://www.torrent9.st' -const defaultTimeout = 10000; - -const Categories = { - MOVIE: 'films', - TV: 'series', -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return singleRequest(`${baseUrl}/torrent/${torrentId}`) - .then((body) => parseTorrentPage(body)) - .then((torrent) => ({ torrentId, ...torrent })) - .catch((err) => { - console.warn(`Failed Torrent9 ${torrentId} request: `, err); - return torrent(torrentId, config, retries - 1) - }); -} - -function browse(config = {}, retries = 2, error = null) { - if (retries === 0) { - return Promise.reject(error || new Error(`Failed browse request`)); - } - const page = config.page || 1; - const category = config.category; - - return singleRequest(`${baseUrl}/torrents_${category}.html,page-${page}`) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1, err)); -} - -function singleRequest(requestUrl) { - const headers = { - 'user-agent': getRandomUserAgent(), - 'accept-encoding': 'gzip, deflate', - 'accept-language': 'en-GB,en;q=0.9,en-US;q=0.8,lt;q=0.7,ar;q=0.6,fr;q=0.5,de;q=0.4' - }; - const options = { headers, timeout: defaultTimeout }; - - return axios.get(requestUrl, options) - .then(response => { - const body = response.data; - if (!body || !body.length) { - throw new Error(`No body: ${requestUrl} with status ${response.status}`); - } - return body; - }) - .catch(error => Promise.reject(error.message || error)); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('tr').each((i, element) => { - const row = $(element); - const titleElement = row.find('td a'); - if (titleElement.length) { - torrents.push({ - title: titleElement.attr('title').trim(), - torrentId: titleElement.attr('href').match(/torrent\/(.*)/)[1], - seeders: parseInt(row.find('span.seed_ok').first().text()), - }); - } - }); - - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const details = $('.movie-detail'); - const magnetLink = details.find('a[href^="magnet"]').first().attr('href'); - const name = getName(details) || $('h1').text(); - const languages = parse(name).languages; - const torrent = { - title: name.trim(), - infoHash: magnetLink ? decode(magnetLink).infoHash : undefined, - magnetLink: magnetLink, - seeders: parseInt(details.find('.movie-information ul:nth-of-type(1) li:nth-of-type(3)').text(), 10), - category: details.find('ul:nth-of-type(4) a').attr('href').match(/_(\w+)\.html$/)[1], - size: parseSize(details.find('ul:nth-of-type(2) li:nth-of-type(3)').text()), - uploadDate: moment(details.find('ul:nth-of-type(3) li:nth-of-type(3)').text(), 'DD/MM/YYYY').toDate(), - languages: languages && languages.includes('french') ? undefined : 'french', - }; - resolve(torrent); - }); -} - -function getName(details) { - const nameElement = details.find('p strong'); - if (nameElement.length === 1) { - return nameElement.contents().filter((_, elem) => elem.type === 'text').text() - } - const description = nameElement.parent().text(); - const nameMatch = description.match( - /(?:[A-Z]+[^A-Z0-9]*|[A-Z0-9-]+(?:[a-z]+\d+)?)\.([\w-]+\.){3,}\w+(?:-\w+)?(?=[A-Z])/); - return nameMatch && nameMatch[0]; -} - -module.exports = { torrent, browse, Categories }; diff --git a/scraper/scrapers/torrentgalaxy/torrentgalaxy_api.js b/scraper/scrapers/torrentgalaxy/torrentgalaxy_api.js deleted file mode 100644 index 7cbf610..0000000 --- a/scraper/scrapers/torrentgalaxy/torrentgalaxy_api.js +++ /dev/null @@ -1,171 +0,0 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const moment = require('moment'); -const decode = require('magnet-uri'); -const Promises = require('../../lib/promises'); -const { getRandomUserAgent } = require('../../lib/requestHelper'); -const { parseSize } = require("../scraperHelper"); - -const defaultProxies = [ - // 'https://torrentgalaxy.to', - // 'https://torrentgalaxy.mx', - 'https://torrentgalaxy.su' -]; -const defaultTimeout = 10000; - -const Categories = { - ANIME: '28', - MOVIE_4K: '3', - MOVIE_PACKS: '4', - MOVIE_SD: '1', - MOVIE_HD: '42', - MOVIE_CAM: '45', - MOVIE_BOLLYWOOD: '46', - TV_SD: '5', - TV_HD: '41', - TV_PACKS: '6', - TV_SPORT: '7', - DOCUMENTARIES: '9' -}; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - const proxyList = config.proxyList || defaultProxies; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/torrent/${torrentId}`))) - .then((body) => parseTorrentPage(body)) - .then((torrent) => ({ torrentId, ...torrent })) - .catch((err) => torrent(torrentId, config, retries - 1)); -} - -function search(keyword, config = {}, retries = 2) { - if (!keyword || retries === 0) { - return Promise.reject(new Error(`Failed ${keyword} search`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/torrents.php?cat=${category}&page=${page - 1}&search=${keyword}`))) - .then((body) => parseTableBody(body)) - .catch(() => search(keyword, config, retries - 1)); -} - -function browse(config = {}, retries = 2, error = null) { - if (retries === 0) { - return Promise.reject(error || new Error(`Failed browse request`)); - } - const proxyList = config.proxyList || defaultProxies; - const page = config.page || 1; - const category = config.category; - - return Promises.first(proxyList - .map((proxyUrl) => singleRequest(`${proxyUrl}/torrents.php?cat=${category}&page=${page - 1}`))) - .then((body) => parseTableBody(body)) - .catch((err) => browse(config, retries - 1, err)); -} - -function singleRequest(requestUrl) { - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: defaultTimeout }; - - return axios.get(requestUrl, options) - .then((response) => { - const body = response.data; - if (!body) { - throw new Error(`No body: ${requestUrl} with status ${response.status}`); - } else if (body.includes('Access Denied')) { - console.log(`Access Denied: ${requestUrl}`); - throw new Error(`Access Denied: ${requestUrl}`); - } else if (body.includes('502: Bad gateway') || - body.includes('403 Forbidden') || - body.includes('Origin DNS error')) { - throw new Error(`Invalid body contents: ${requestUrl}`); - } - return body; - }); -} - -function parseTableBody(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - - const torrents = []; - - $('.tgxtable > div').each((i, element) => { - if (i === 0) return; - const row = $(element); - const magnetLink = row.find('div:nth-of-type(n+2) .collapsehide > a:nth-of-type(2)').attr('href'); - const imdbIdMatch = row.html().match(/search=(tt\d+)/i); - try { - torrents.push({ - name: row.find('.tgxtablecell div a[title]').first().text(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - torrentLink: row.find('div:nth-of-type(n+2) .collapsehide > a:nth-of-type(1)').first().attr('href'), - torrentId: row.find('.tgxtablecell div a[title]').first().attr('href').match(/torrent\/(\d+)/)[1], - verified: !!row.find('i.fa-check').length, - category: row.find('div:nth-of-type(n+2) .shrink a').first().attr('href').match(/cat=(\d+)$/)[1], - seeders: parseInt(row.find('div:nth-of-type(n+2) .collapsehide [color=\'green\'] b').first().text()), - leechers: parseInt(row.find('div:nth-of-type(n+2) .collapsehide [color=\'#ff0000\'] b').first().text()), - languages: row.find('.tgxtablecell img[title]').first().attr('title'), - size: parseSize(row.find('.collapsehide span.badge-secondary').first().text()), - uploadDate: parseDate(row.find('div.collapsehide:nth-of-type(12)').first().text()), - imdbId: imdbIdMatch && imdbIdMatch[1], - }); - } catch (e) { - console.error('Failed parsing TorrentGalaxy row: ', e); - } - }); - - resolve(torrents); - }); -} - -function parseTorrentPage(body) { - return new Promise((resolve, reject) => { - const $ = cheerio.load(body); - - if (!$) { - reject(new Error('Failed loading body')); - } - const content = $('div[class="torrentpagetable limitwidth"]').first(); - const magnetLink = $('a[class="btn btn-danger"]').attr('href'); - const imdbIdContent = $('a[title="IMDB link"]').attr('href'); - const imdbIdMatch = imdbIdContent && imdbIdContent.match(/imdb\.com\/title\/(tt\d+)/i); - - const torrent = { - name: content.find('.linebreakup a').first().text(), - infoHash: decode(magnetLink).infoHash, - magnetLink: magnetLink, - verified: !content.find('i.fa-exclamation-triangle').length, - torrentLink: $('a[class="btn btn-success"]').attr('href'), - seeders: parseInt(content.find('font[color=\'green\']').first().text(), 10), - category: content.find('div:nth-of-type(4) a:nth-of-type(2)').first().attr('href').match(/cat=(\d+)$/)[1], - languages: content.find('div:nth-of-type(5) div:nth-of-type(2)').first().text().trim(), - size: parseSize(content.find('div:nth-of-type(6) div:nth-of-type(2)').first().text()), - uploadDate: parseDate(content.find('div:nth-of-type(9) div:nth-of-type(2)').first().text()), - imdbId: imdbIdMatch && imdbIdMatch[1], - }; - resolve(torrent); - }); -} - -function parseDate(dateString) { - if (dateString.includes('ago')) { - const amount = parseInt(dateString, 10); - const unit = dateString.includes('Min') ? 'minutes' : 'hours'; - return moment().subtract(amount, unit).toDate(); - } - const preparedDate = dateString.replace(/\//g, '-').replace(/-(\d{2})\s/, '-20$1 ') - return moment(preparedDate, 'DD-MM-YYYY HH:mm').toDate(); -} - -module.exports = { torrent, search, browse, Categories }; diff --git a/scraper/scrapers/torrentgalaxy/torrentgalaxy_scraper.js b/scraper/scrapers/torrentgalaxy/torrentgalaxy_scraper.js deleted file mode 100644 index 35c5603..0000000 --- a/scraper/scrapers/torrentgalaxy/torrentgalaxy_scraper.js +++ /dev/null @@ -1,132 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const torrentGalaxy = require('./torrentgalaxy_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const Promises = require('../../lib/promises'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'TorrentGalaxy'; -const TYPE_MAPPING = typeMapping(); - -const api_limiter = new Bottleneck({ maxConcurrent: 1, minTime: 5000 }); -const limiter = new Bottleneck({ maxConcurrent: 10 }); -const allowedCategories = [ - torrentGalaxy.Categories.ANIME, - torrentGalaxy.Categories.MOVIE_4K, - torrentGalaxy.Categories.MOVIE_PACKS, - torrentGalaxy.Categories.MOVIE_SD, - torrentGalaxy.Categories.MOVIE_HD, - torrentGalaxy.Categories.MOVIE_CAM, - torrentGalaxy.Categories.MOVIE_BOLLYWOOD, - torrentGalaxy.Categories.TV_SD, - torrentGalaxy.Categories.TV_HD, - torrentGalaxy.Categories.TV_PACKS, - torrentGalaxy.Categories.DOCUMENTARIES, -]; -const packCategories = [ - torrentGalaxy.Categories.MOVIE_PACKS, - torrentGalaxy.Categories.TV_PACKS -]; - -async function scrape() { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - // const ids = ['14212584']; - // return Promise.all(ids.map(id => limiter.schedule(() => torrentGalaxy.torrent(id) - // .then(torrent => processTorrentRecord(torrent))))) - // .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); - return scrapeLatestTorrents() - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => torrentGalaxy.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrents() { - return Promises.sequence(allowedCategories.map(category => () => scrapeLatestTorrentsForCategory(category))) - .then(entries => entries.reduce((a, b) => a.concat(b), [])); -} - -async function scrapeLatestTorrentsForCategory(category, page = 1) { - console.log(`Scrapping ${NAME} ${category} category page ${page}`); - return api_limiter.schedule(() => torrentGalaxy.browse({ category, page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] ${category} due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < getMaxPage(category) - ? scrapeLatestTorrentsForCategory(category, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (!record || !TYPE_MAPPING[record.category] || !record.verified) { - return Promise.resolve('Invalid torrent record'); - } - - const torrent = { - provider: NAME, - infoHash: record.infoHash, - torrentId: record.torrentId, - torrentLink: record.torrentLink, - title: record.name.replace(/\t|\s+/g, ' '), - type: TYPE_MAPPING[record.category], - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - imdbId: record.imdbId, - pack: packCategories.includes(record.category), - languages: !(record.languages || '').includes('Other') ? record.languages : undefined - }; - - if (await checkAndUpdateTorrent(torrent)) { - return torrent; - } - const isOld = moment(torrent.uploadDate).isBefore(moment().subtract(18, 'month')); - if (torrent.seeders === 0 && isOld && !torrent.pack) { - console.log(`Skipping old unseeded torrent [${torrent.infoHash}] ${torrent.title}`) - return torrent; - } - - return createTorrentEntry(torrent).then(() => torrent); -} - -function typeMapping() { - const mapping = {}; - mapping[torrentGalaxy.Categories.MOVIE_SD] = Type.MOVIE; - mapping[torrentGalaxy.Categories.MOVIE_HD] = Type.MOVIE; - mapping[torrentGalaxy.Categories.MOVIE_4K] = Type.MOVIE; - mapping[torrentGalaxy.Categories.MOVIE_CAM] = Type.MOVIE; - mapping[torrentGalaxy.Categories.MOVIE_PACKS] = Type.MOVIE; - mapping[torrentGalaxy.Categories.MOVIE_BOLLYWOOD] = Type.MOVIE; - mapping[torrentGalaxy.Categories.DOCUMENTARIES] = Type.MOVIE; - mapping[torrentGalaxy.Categories.TV_SD] = Type.SERIES; - mapping[torrentGalaxy.Categories.TV_HD] = Type.SERIES; - mapping[torrentGalaxy.Categories.TV_PACKS] = Type.SERIES; - mapping[torrentGalaxy.Categories.TV_SPORT] = Type.SERIES; - mapping[torrentGalaxy.Categories.ANIME] = Type.ANIME; - return mapping; -} - -function getMaxPage(category) { - switch (category) { - case torrentGalaxy.Categories.TV_SD: - case torrentGalaxy.Categories.TV_HD: - case torrentGalaxy.Categories.MOVIE_SD: - case torrentGalaxy.Categories.MOVIE_HD: - return 5; - default: - return 1; - } -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/scraper/scrapers/yts/yts_api.js b/scraper/scrapers/yts/yts_api.js deleted file mode 100644 index 3e77095..0000000 --- a/scraper/scrapers/yts/yts_api.js +++ /dev/null @@ -1,98 +0,0 @@ -const axios = require('axios'); -const Promises = require('../../lib/promises'); -const { getRandomUserAgent } = require('./../../lib/requestHelper'); - -const defaultProxies = [ - 'https://yts.mx' -]; -const defaultTimeout = 30000; -const limit = 50; - -function torrent(torrentId, config = {}, retries = 2) { - if (!torrentId || retries === 0) { - return Promise.reject(new Error(`Failed ${torrentId} search`)); - } - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/v2/movie_details.json?movie_id=${torrentId}`, config))) - .then(body => parseResults(body)) - .catch(error => torrent(torrentId, config, retries - 1)); -} - -function search(query, config = {}, retries = 2) { - if (!query || retries === 0) { - return Promise.reject(new Error(`Failed ${query} search`)); - } - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/v2/list_movies.json?limit=${limit}&query_term=${query}`, config))) - .then(results => parseResults(results)) - .catch(error => search(query, config, retries - 1)); -} - -function browse(config = {}, retries = 2) { - if (retries === 0) { - return Promise.reject(new Error(`Failed browse request`)); - } - const page = config.page || 1; - - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/v2/list_movies.json?limit=${limit}&page=${page}`, config))) - .then(results => parseResults(results)) - .catch(error => browse(config, retries - 1)); -} - -function maxPage() { - return Promises.first(defaultProxies - .map(proxyUrl => singleRequest(`${proxyUrl}/api/v2/list_movies.json?limit=${limit}`))) - .then(results => Math.round((results?.data?.movie_count || 0) / limit)) -} - -function singleRequest(requestUrl, config = {}) { - const timeout = config.timeout || defaultTimeout; - const options = { headers: { 'User-Agent': getRandomUserAgent() }, timeout: timeout }; - - return axios.get(requestUrl, options) - .then(response => { - if (!response.data) { - return Promise.reject(`No body: ${requestUrl}`); - } - return Promise.resolve(response.data); - }); -} - -function parseResults(results) { - if (!results || !results.data || (!results.data.movie && !Array.isArray(results.data.movies))) { - console.log('Incorrect results: ', results); - return Promise.reject('Incorrect results') - } - return (results.data.movies || [results.data.movie]) - .filter(movie => Array.isArray(movie.torrents)) - .map(movie => parseMovie(movie)) - .reduce((a, b) => a.concat(b), []); -} - -function parseMovie(movie) { - return movie.torrents.map(torrent => ({ - name: `${movie.title} ${movie.year} ${torrent.quality} ${formatType(torrent.type)} `, - torrentId: `${movie.id}-${torrent.hash.trim().toLowerCase()}`, - infoHash: torrent.hash.trim().toLowerCase(), - torrentLink: torrent.url, - seeders: torrent.seeds, - size: torrent.size_bytes, - uploadDate: new Date(torrent.date_uploaded_unix * 1000), - imdbId: movie.imdb_code - })); -} - -function formatType(type) { - if (type === 'web') { - return 'WEBRip'; - } - if (type === 'bluray') { - return 'BluRay'; - } - return type.toUpperCase(); -} - -module.exports = { torrent, search, browse, maxPage }; \ No newline at end of file diff --git a/scraper/scrapers/yts/yts_full_scraper.js b/scraper/scrapers/yts/yts_full_scraper.js deleted file mode 100644 index b6af91d..0000000 --- a/scraper/scrapers/yts/yts_full_scraper.js +++ /dev/null @@ -1,15 +0,0 @@ -const moment = require("moment"); -const yts = require('./yts_api'); -const scraper = require('./yts_scraper') - - -async function scrape() { - const scrapeStart = moment(); - console.log(`[${scrapeStart}] starting ${scraper.NAME} full scrape...`); - - return yts.maxPage() - .then(maxPage => scraper.scrape(maxPage)) - .then(() => console.log(`[${moment()}] finished ${scraper.NAME} full scrape`)); -} - -module.exports = { scrape, NAME: scraper.NAME }; \ No newline at end of file diff --git a/scraper/scrapers/yts/yts_scraper.js b/scraper/scrapers/yts/yts_scraper.js deleted file mode 100644 index 7e26620..0000000 --- a/scraper/scrapers/yts/yts_scraper.js +++ /dev/null @@ -1,67 +0,0 @@ -const moment = require('moment'); -const Bottleneck = require('bottleneck'); -const yts = require('./yts_api'); -const { Type } = require('../../lib/types'); -const repository = require('../../lib/repository'); -const { createTorrentEntry, checkAndUpdateTorrent } = require('../../lib/torrentEntries'); - -const NAME = 'YTS'; -const UNTIL_PAGE = 10; - -const limiter = new Bottleneck({ maxConcurrent: 10 }); - -async function scrape(maxPage) { - const scrapeStart = moment(); - const lastScrape = await repository.getProvider({ name: NAME }); - console.log(`[${scrapeStart}] starting ${NAME} scrape...`); - - return scrapeLatestTorrentsForCategory(maxPage) - .then(() => { - lastScrape.lastScraped = scrapeStart; - return lastScrape.save(); - }) - .then(() => console.log(`[${moment()}] finished ${NAME} scrape`)); -} - -async function updateSeeders(torrent) { - return limiter.schedule(() => yts.torrent(torrent.torrentId)); -} - -async function scrapeLatestTorrentsForCategory(maxPage = UNTIL_PAGE, page = 1) { - console.log(`Scrapping ${NAME} page ${page}`); - return yts.browse(({ page })) - .catch(error => { - console.warn(`Failed ${NAME} scrapping for [${page}] due: `, error); - return Promise.resolve([]); - }) - .then(torrents => Promise.all(torrents.map(torrent => limiter.schedule(() => processTorrentRecord(torrent))))) - .then(resolved => resolved.length > 0 && page < maxPage - ? scrapeLatestTorrentsForCategory(maxPage, page + 1) - : Promise.resolve()); -} - -async function processTorrentRecord(record) { - if (await checkAndUpdateTorrent(record)) { - return record; - } - - if (!record || !record.size) { - return Promise.resolve('Invalid torrent record'); - } - - const torrent = { - infoHash: record.infoHash, - provider: NAME, - torrentId: record.torrentId, - title: record.name.replace(/\t|\s+/g, ' ').trim(), - type: Type.MOVIE, - size: record.size, - seeders: record.seeders, - uploadDate: record.uploadDate, - imdbId: record.imdbId, - }; - - return createTorrentEntry(torrent).then(() => torrent); -} - -module.exports = { scrape, updateSeeders, NAME }; \ No newline at end of file diff --git a/addon/.dockerignore b/src/node/addon-jackett/.dockerignore similarity index 100% rename from addon/.dockerignore rename to src/node/addon-jackett/.dockerignore diff --git a/src/node/addon-jackett/.eslintignore b/src/node/addon-jackett/.eslintignore new file mode 100644 index 0000000..b0a155e --- /dev/null +++ b/src/node/addon-jackett/.eslintignore @@ -0,0 +1 @@ +*.ts \ No newline at end of file diff --git a/src/node/addon-jackett/.eslintrc.cjs b/src/node/addon-jackett/.eslintrc.cjs new file mode 100644 index 0000000..5aac833 --- /dev/null +++ b/src/node/addon-jackett/.eslintrc.cjs @@ -0,0 +1,39 @@ +/** @type {import("eslint").ESLint.Options} */ +module.exports = { + env: { + es2024: true, + node: true, + }, + globals: { + Atomics: "readonly", + SharedArrayBuffer: "readonly", + }, + parserOptions: { + sourceType: "module", + }, + plugins: ["import", "import-helpers"], + rules: { + "default-case": "off", + "import/no-duplicates": "off", + "import/no-extraneous-dependencies": ["off", { devDependencies: ["backend", "frontend", "mobile"] }], + "import/order": "off", + "import-helpers/order-imports": [ + "warn", + { + alphabetize: { + order: "asc", + }, + }, + ], + "lines-between-class-members": ["error", "always", { exceptAfterSingleLine: true }], + "no-continue": "off", + "no-param-reassign": "off", + "no-plusplus": ["error", { allowForLoopAfterthoughts: true }], + "no-restricted-syntax": "off", + "no-unused-expressions": ["off", { allowShortCircuit: true }], + "no-unused-vars": "off", + "no-use-before-define": "off", + "one-var": ["error", { uninitialized: "consecutive" }], + "prefer-destructuring": "warn", + }, +}; \ No newline at end of file diff --git a/src/node/addon-jackett/Dockerfile b/src/node/addon-jackett/Dockerfile new file mode 100644 index 0000000..cf4f93a --- /dev/null +++ b/src/node/addon-jackett/Dockerfile @@ -0,0 +1,29 @@ +# --- Build Stage --- +FROM node:lts-alpine AS builder + +RUN apk update && apk upgrade && \ + apk add --no-cache git + +WORKDIR /app + +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# --- Runtime Stage --- +FROM node:lts-alpine + +# Install pm2 +RUN npm install pm2 -g + +WORKDIR /app + +ENV NODE_ENV production + +COPY --from=builder /app ./ +RUN npm prune --omit=dev + +EXPOSE 7001 + +ENTRYPOINT [ "pm2-runtime", "start", "ecosystem.config.cjs"] \ No newline at end of file diff --git a/src/node/addon-jackett/README.md b/src/node/addon-jackett/README.md new file mode 100644 index 0000000..596275e --- /dev/null +++ b/src/node/addon-jackett/README.md @@ -0,0 +1 @@ +# addon-jackett diff --git a/src/node/addon-jackett/build.sh b/src/node/addon-jackett/build.sh new file mode 100644 index 0000000..c06bbb3 --- /dev/null +++ b/src/node/addon-jackett/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker build -t ippexdeploymentscr.azurecr.io/dave/stremio-addon-jackett:latest . --platform linux/amd64 +docker push ippexdeploymentscr.azurecr.io/dave/stremio-addon-jackett:latest \ No newline at end of file diff --git a/src/node/addon-jackett/ecosystem.config.cjs b/src/node/addon-jackett/ecosystem.config.cjs new file mode 100644 index 0000000..b6efbd8 --- /dev/null +++ b/src/node/addon-jackett/ecosystem.config.cjs @@ -0,0 +1,14 @@ +module.exports = { + apps: [ + { + name: 'stremio-jackett', + script: 'npm start', + cwd: '/app', + watch: ['./dist/index.js'], + autorestart: true, + env: { + ...process.env, + }, + }, + ], +}; diff --git a/src/node/addon-jackett/esbuild.js b/src/node/addon-jackett/esbuild.js new file mode 100644 index 0000000..983c001 --- /dev/null +++ b/src/node/addon-jackett/esbuild.js @@ -0,0 +1,68 @@ +import { build } from 'esbuild'; +import { copy } from 'esbuild-plugin-copy'; +import { readFileSync, rmSync } from 'fs'; + +const { devDependencies } = JSON.parse(readFileSync('./package.json', 'utf8')); + +const start = Date.now(); + +try { + const outdir = 'dist'; + + rmSync(outdir, { recursive: true, force: true }); + + build({ + bundle: true, + entryPoints: [ + './src/index.js', + // "./src/**/*.css", + // "./src/**/*.hbs", + // "./src/**/*.html" + ], + external: [...(devDependencies && Object.keys(devDependencies))], + keepNames: true, + loader: { + '.css': 'copy', + '.hbs': 'copy', + '.html': 'copy', + }, + minify: true, + outbase: './src', + outdir, + outExtension: { + '.js': '.cjs', + }, + platform: 'node', + plugins: [ + { + name: 'populate-import-meta', + setup: ({ onLoad }) => { + onLoad({ filter: new RegExp(`${import.meta.dirname}/src/.*\.(js|ts)$`) }, args => { + const contents = readFileSync(args.path, 'utf8'); + + const transformedContents = contents + .replace(/import\.meta/g, `{dirname:__dirname,filename:__filename}`) + .replace(/import\.meta\.filename/g, '__filename') + .replace(/import\.meta\.dirname/g, '__dirname'); + + return { contents: transformedContents, loader: 'default' }; + }); + }, + }, + copy({ + assets: [ + { + from: ['./static/**'], + to: ['./static'], + }, + ], + }), + ], + }).then(() => { + // biome-ignore lint/style/useTemplate: + console.log('⚡ ' + '\x1b[32m' + `Done in ${Date.now() - start}ms`); + }); +} catch (e) { + console.log(e); + process.exit(1); +} diff --git a/src/node/addon-jackett/jsconfig.json b/src/node/addon-jackett/jsconfig.json new file mode 100644 index 0000000..6b1c407 --- /dev/null +++ b/src/node/addon-jackett/jsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + "checkJs": true, + "isolatedModules": true, + "lib": ["es6"], + "module": "ESNext", + "moduleResolution": "node", + "outDir": "./dist", + "pretty": true, + "removeComments": true, + "resolveJsonModule": true, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": true, + "target": "ES6", + "types": ["node"], + "typeRoots": ["node_modules/@types", "src/@types"] + }, + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/src/node/addon-jackett/package-lock.json b/src/node/addon-jackett/package-lock.json new file mode 100644 index 0000000..431f1f5 --- /dev/null +++ b/src/node/addon-jackett/package-lock.json @@ -0,0 +1,6024 @@ +{ + "name": "jackettio-addon", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "jackettio-addon", + "version": "0.0.1", + "dependencies": { + "@putdotio/api-client": "^8.42.0", + "all-debrid-api": "^1.1.0", + "axios": "^1.6.1", + "bottleneck": "^2.19.5", + "cache-manager": "^3.4.4", + "cache-manager-mongodb": "^0.3.0", + "cors": "^2.8.5", + "debrid-link-api": "^1.0.1", + "express": "^4.18.2", + "express-rate-limit": "^6.7.0", + "magnet-uri": "^6.2.0", + "named-queue": "^2.2.1", + "offcloud-api": "^1.0.2", + "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", + "premiumize-api": "^1.0.3", + "real-debrid-api": "git://github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", + "request-ip": "^3.3.0", + "router": "^1.3.8", + "stremio-addon-sdk": "^1.6.10", + "ua-parser-js": "^1.0.36", + "url-join": "^5.0.0", + "user-agents": "^1.0.1444", + "video-name-parser": "^1.4.6", + "xml-js": "^1.6.11", + "xml2js": "^0.6.2" + }, + "devDependencies": { + "@types/node": "^20.11.6", + "@types/stremio-addon-sdk": "^1.6.10", + "esbuild": "^0.19.12", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import-helpers": "^1.3.1", + "eslint-plugin-prettier": "^5.1.3", + "husky": "^9.0.6", + "lint-staged": "^15.2.0", + "prettier": "^3.2.4", + "tsx": "^4.7.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@putdotio/api-client": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.42.0.tgz", + "integrity": "sha512-LaFaPMOO8WbvwzUlvuzBcBH9aSpqZIkA6MuoKJPNZ293kFSMZPyXkE/VddVXPNq0f5sp7HzdueCMIPOxcom9hg==", + "dependencies": { + "axios": "^0.21.1", + "event-emitter": "^0.3.5", + "js-base64": "2.6.3", + "qs": "^6.10.3", + "urijs": "^1.19.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@putdotio/api-client/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.14.tgz", + "integrity": "sha512-w3yWCcwULefjP9DmDDsgUskrMoOy5Z8MiwKHr1FvqGPtx7CvJzQvxD7eKpxNtklQxLruxSXWddyeRtyud0RcXQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stremio-addon-sdk": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@types/stremio-addon-sdk/-/stremio-addon-sdk-1.6.11.tgz", + "integrity": "sha512-y0nXwX2gqrWcVYLEvujxqLOm/yZoMu8nLyiw1MthgVuiPp6RVfgWqwpql71MUV5shSfPNsd7EtsiWw2cUFhcWQ==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/all-debrid-api": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/all-debrid-api/-/all-debrid-api-1.1.0.tgz", + "integrity": "sha512-p6Z8M9UBGkEZK2/qJ2YHBPDyDGW1CEZQ+GCp8IQb4UlC/9GIUgeRPjh2ohoAIBPn3gs6hPvZ8wIVS04lJ3SuHA==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "node_modules/axios": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bep53-range": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bep53-range/-/bep53-range-1.1.1.tgz", + "integrity": "sha512-ct6s33iiwRCUPp9KXnJ4QMWDgHIgaw36caK/5XEQ9L8dCzSQlJt1Vk6VmHh1VD4AlGCAI4C2zmtfItifBBPrhQ==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-manager": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", + "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", + "dependencies": { + "async": "3.2.3", + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/cache-manager-mongodb": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/cache-manager-mongodb/-/cache-manager-mongodb-0.3.0.tgz", + "integrity": "sha512-r+piWvu8XD8ceBWflZBEQZKemksoaL1V5zSHWyviVTXiGBSVQAf18b4S1v5UwGZMJnrMk8YNFgpBlugF0nuhvg==", + "dependencies": { + "bluebird": "^3.5.3", + "cache-manager": "^2.9.0", + "lodash": "^4.17.15", + "mongodb": "^3.6.3" + } + }, + "node_modules/cache-manager-mongodb/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + }, + "node_modules/cache-manager-mongodb/node_modules/cache-manager": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz", + "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==", + "dependencies": { + "async": "1.5.2", + "lodash.clonedeep": "4.5.0", + "lru-cache": "4.0.0" + } + }, + "node_modules/cache-manager-mongodb/node_modules/lru-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", + "integrity": "sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==", + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/cache-manager-mongodb/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debrid-link-api": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debrid-link-api/-/debrid-link-api-1.0.1.tgz", + "integrity": "sha512-8b15xUosQ64v1wcN1cGSvt4YXm4dw7gi5hOvqPDOtvsEtlaH2pp/BdjS9/oUh866bPirFVzXrjnIwVK4dRsm3g==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/esbuild-plugin-copy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz", + "integrity": "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "fs-extra": "^10.0.1", + "globby": "^11.0.3" + }, + "peerDependencies": { + "esbuild": ">= 0.14.0" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/esbuild-plugin-copy/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import-helpers": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-helpers/-/eslint-plugin-import-helpers-1.3.1.tgz", + "integrity": "sha512-MrACDozK6TmTJoCFHD71Ew3r5210Za3zlTrhX+fQGsyvxceaFvAI9AcvZ/8oSU0pZ61G3nDEn6mXY0T4S8cJEg==", + "dev": true, + "peerDependencies": { + "eslint": "5.x - 8.x" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-rate-limit": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", + "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4 || ^5" + } + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.7.tgz", + "integrity": "sha512-vWdusw+y12DUEeoZqW1kplOFqk3tedGV8qlga8/SF6a3lOiWLqGZZQvfWvY0fQYdfiRi/u1DFNpudTSV9l1aCg==", + "dev": true, + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/js-base64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz", + "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/lint-staged": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.1.tgz", + "integrity": "sha512-dhwAPnM85VdshybV9FWI/9ghTvMLoQLEXgVMx+ua2DN7mdfzd/tRfoU2yhMcBac0RHkofoxdnnJUokr8s4zKmQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/listr2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magnet-uri": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-6.2.0.tgz", + "integrity": "sha512-O9AgdDwT771fnUj0giPYu/rACpz8173y8UXCSOdLITjOVfBenZ9H9q3FqQmveK+ORUMuD+BkKNSZP8C3+IMAKQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "bep53-range": "^1.1.0", + "thirty-two": "^1.0.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", + "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.1.8", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/named-queue": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/named-queue/-/named-queue-2.2.1.tgz", + "integrity": "sha1-GBRURVNZnVqeQD0N+pN6TODR5qc=" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/offcloud-api": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/offcloud-api/-/offcloud-api-1.0.2.tgz", + "integrity": "sha512-KOxDX+QIUcI/JEwoXoRGK7P+RygSsmCOta/6bEtKeBMc9CDEnb9xgGNDjDFYCxm6U8rvaOhF9NA02i3EisH9Pw==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "dependencies": { + "require-at": "^1.0.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-torrent-title": { + "version": "1.3.0", + "resolved": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", + "integrity": "sha512-Ja7OfUtTb5UKvcjHLh/va3LGZdE/CiJP6it8lxPWf/N9+4aq1hQGwXw1dnJss5dIINQo4ufyDnT2mOIP+ii/pA==", + "license": "MIT", + "dependencies": { + "moment": "^2.24.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/premiumize-api": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/premiumize-api/-/premiumize-api-1.0.3.tgz", + "integrity": "sha512-WwJhgmwrKrFFtfjU2EMAaYv602xbe52oaGEwVJXO3z0LZQZ8Cogk9MBADcT0hrFf8MuI7zn5cPMxcJRJPr9cMQ==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/prettier": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-debrid-api": { + "version": "1.0.1", + "resolved": "git+ssh://git@github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", + "integrity": "sha512-P4eoA7/wvDM6/l06OZYX4CBnIzsTNwebdS6fZ4u6LZ3fcJqTzWz3D63xBDZmfcOca/OeUN4ncFld+KxvrNr0oA==", + "license": "MIT", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-ip": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", + "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/router": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", + "dependencies": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "node_modules/run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "dependencies": { + "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stremio-addon-linter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", + "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/stremio-addon-sdk": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", + "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", + "dependencies": { + "chalk": "^2.4.2", + "cors": "^2.8.4", + "express": "^4.16.3", + "inquirer": "^6.2.2", + "mkdirp": "^0.5.1", + "node-fetch": "^2.3.0", + "opn": "^5.4.0", + "router": "^1.3.3", + "stremio-addon-linter": "^1.7.0" + }, + "bin": { + "addon-bootstrap": "cli/bootstrap.js" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno=", + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, + "node_modules/tsx": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", + "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", + "dev": true, + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/user-agents": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.9.tgz", + "integrity": "sha512-XxKEWX2bHJzPjvUPRAtw+oPQchReLaR1s59iO/RhBA2TfLLgLUsFvz5MupsejqFfuhXZmZRH8t3kHBvS0ctzGg==", + "dependencies": { + "lodash.clonedeep": "^4.5.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/video-name-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/video-name-parser/-/video-name-parser-1.4.6.tgz", + "integrity": "sha512-ZdeYjh8X4ms1EzjY/UoiTZ6JWbi8SYyOPGY0jESSLq2BAmdc5sZHi+F8J19Qz0y7H1WSpaltojsCkO1p2dH4YA==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/scraper/package.json b/src/node/addon-jackett/package.json similarity index 53% rename from scraper/package.json rename to src/node/addon-jackett/package.json index 06bfc53..fb3932d 100644 --- a/scraper/package.json +++ b/src/node/addon-jackett/package.json @@ -1,13 +1,13 @@ { - "name": "stremio-torrentio", - "version": "1.0.14", - "exports": "./index.js", - "type": "commonjs", + "name": "jackettio-addon", + "version": "0.0.1", + "type": "module", "scripts": { - "start": "node index.js" + "build": "node esbuild.js", + "dev": "tsx watch --ignore node_modules src/index.js", + "start": "node dist/index.cjs", + "lint": "eslint . --ext .ts,.js" }, - "author": "TheBeastLT ", - "license": "MIT", "dependencies": { "@putdotio/api-client": "^8.42.0", "all-debrid-api": "^1.1.0", @@ -17,34 +17,32 @@ "cache-manager-mongodb": "^0.3.0", "cors": "^2.8.5", "debrid-link-api": "^1.0.1", + "express": "^4.18.2", "express-rate-limit": "^6.7.0", - "google-it": "^1.6.4", - "google-sr": "^3.2.1", - "he": "^1.2.0", - "jaro-winkler": "^0.2.8", "magnet-uri": "^6.2.0", - "name-to-imdb": "^3.0.4", "named-queue": "^2.2.1", - "needle": "^3.3.1", - "node-schedule": "^2.1.1", - "nodejs-bing": "^0.1.0", - "nyaapi": "^2.4.4", "offcloud-api": "^1.0.2", "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", - "pg": "^8.11.3", - "pg-hstore": "^2.3.4", "premiumize-api": "^1.0.3", - "prom-client": "^12.0.0", "real-debrid-api": "git://github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", "request-ip": "^3.3.0", "router": "^1.3.8", - "rss-parser": "^3.13.0", - "sequelize": "^6.31.1", "stremio-addon-sdk": "^1.6.10", - "sugar-date": "^2.0.6", - "swagger-stats": "^0.99.7", - "torrent-stream": "^1.2.1", "ua-parser-js": "^1.0.36", - "user-agents": "^1.0.1444" + "url-join": "^5.0.0", + "user-agents": "^1.0.1444", + "video-name-parser": "^1.4.6", + "xml-js": "^1.6.11", + "xml2js": "^0.6.2" + }, + "devDependencies": { + "@types/node": "^20.11.6", + "@types/stremio-addon-sdk": "^1.6.10", + "esbuild": "^0.19.12", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.56.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import-helpers": "^1.3.1", + "tsx": "^4.7.0" } } diff --git a/src/node/addon-jackett/src/addon.js b/src/node/addon-jackett/src/addon.js new file mode 100644 index 0000000..77d650e --- /dev/null +++ b/src/node/addon-jackett/src/addon.js @@ -0,0 +1,126 @@ +import Bottleneck from 'bottleneck'; +import {addonBuilder} from 'stremio-addon-sdk'; +import {searchJackett} from "./jackett/jackett.js"; +import {cacheWrapStream} from './lib/cache.js'; +import {getMetaData} from "./lib/cinemetaProvider.js"; +import {dummyManifest} from './lib/manifest.js'; +import {cacheConfig, processConfig} from "./lib/settings.js"; +import applySorting from './lib/sort.js'; +import {toStreamInfo} from './lib/streamInfo.js'; +import {Type} from './lib/types.js'; +import {applyMochs, getMochCatalog, getMochItemMeta} from './moch/moch.js'; +import StaticLinks from './moch/static.js'; + +const builder = new addonBuilder(dummyManifest()); +const limiter = new Bottleneck({ + maxConcurrent: 200, + highWater: 220, + strategy: Bottleneck.strategy.OVERFLOW +}); + +builder.defineStreamHandler((args) => { + if (!args.id.match(/tt\d+/i) && !args.id.match(/kitsu:\d+/i)) { + return Promise.resolve({ streams: [] }); + } + + if (processConfig.DEBUG) { + console.log(`Incoming stream ${args.id} request`) + console.log('args', args); + } + + return cacheWrapStream(args.id, () => limiter.schedule(() => + streamHandler(args) + .then(records => records.map(record => toStreamInfo(record, args.type)))) + .then(streams => applySorting(streams, args.extra)) + .then(streams => applyMochs(streams, args.extra)) + .then(streams => enrichCacheParams(streams)) + .catch(error => { + console.log(`Failed request ${args.id}: ${error}`); + return Promise.reject(`Failed request ${args.id}: ${error}`); + })); +}); + + +builder.defineCatalogHandler((args) => { + const mochKey = args.id.replace("jackettio-", ''); + console.log(`Incoming catalog ${args.id} request with skip=${args.extra.skip || 0}`) + return getMochCatalog(mochKey, args.extra) + .then(metas => ({ + metas: metas, + cacheMaxAge: cacheConfig.CATALOG_CACHE_MAX_AGE + })) + .catch(error => { + return Promise.reject(`Failed retrieving catalog ${args.id}: ${JSON.stringify(error)}`); + }); +}) + +builder.defineMetaHandler((args) => { + const [mochKey, metaId] = args.id.split(':'); + console.log(`Incoming debrid meta ${args.id} request`) + return getMochItemMeta(mochKey, metaId, args.extra) + .then(meta => ({ + meta: meta, + cacheMaxAge: metaId === 'Downloads' ? 0 : cacheConfig.CACHE_MAX_AGE + })) + .catch(error => { + return Promise.reject(`Failed retrieving catalog meta ${args.id}: ${JSON.stringify(error)}`); + }); +}) + +async function streamHandler(args) { + if (args.type === Type.MOVIE) { + return movieRecordsHandler(args); + } else if (args.type === Type.SERIES) { + return seriesRecordsHandler(args); + } + return Promise.reject('not supported type'); +} + +async function seriesRecordsHandler(args) { + if (args.id.match(/^tt\d+:\d+:\d+$/)) { + const parts = args.id.split(':'); + const season = parts[1] !== undefined ? parseInt(parts[1], 10) : 1; + const episode = parts[2] !== undefined ? parseInt(parts[2], 10) : 1; + + const metaData = await getMetaData(args); + return await searchJackett({ + type: Type.SERIES, + season: season, + episode: episode, + name: metaData.name, + }); + } + + return []; +} + +async function movieRecordsHandler(args) { + if (args.id.match(/^tt\d+$/)) { + + const metaData = await getMetaData(args); + return await searchJackett({ + type: Type.MOVIE, + name: metaData.name, + year: metaData.year, + }); + } + + return []; +} + +function enrichCacheParams(streams) { + let cacheAge = cacheConfig.CACHE_MAX_AGE; + if (!streams.length) { + cacheAge = cacheConfig.CACHE_MAX_AGE_EMPTY; + } else if (streams.every(stream => stream?.url?.endsWith(StaticLinks.FAILED_ACCESS))) { + cacheAge = 0; + } + return { + streams: streams, + cacheMaxAge: cacheAge, + staleRevalidate: cacheConfig.STALE_REVALIDATE_AGE, + staleError: cacheConfig.STALE_ERROR_AGE + } +} + +export default builder.getInterface(); diff --git a/src/node/addon-jackett/src/index.js b/src/node/addon-jackett/src/index.js new file mode 100644 index 0000000..90b297b --- /dev/null +++ b/src/node/addon-jackett/src/index.js @@ -0,0 +1,13 @@ +import express from 'express'; +import { initBestTrackers } from './lib/magnetHelper.js'; +import {processConfig} from "./lib/settings.js"; +import serverless from './serverless.js'; + +const app = express(); +app.enable('trust proxy'); +app.use(express.static('static', { maxAge: '1y' })); +app.use((req, res) => serverless(req, res)); +app.listen(processConfig.PORT, () => { + initBestTrackers() + .then(() => console.log(`Started addon at: http://localhost:${processConfig.PORT}`)); +}); diff --git a/src/node/addon-jackett/src/jackett/jacketParser.js b/src/node/addon-jackett/src/jackett/jacketParser.js new file mode 100644 index 0000000..b955551 --- /dev/null +++ b/src/node/addon-jackett/src/jackett/jacketParser.js @@ -0,0 +1,151 @@ +import videoNameParser from "video-name-parser"; +import {parseStringPromise as parseString} from "xml2js"; +import {processConfig, jackettConfig} from "../lib/settings.js"; + +export function extractSize(title) { + const seedersMatch = title.match(/💾 ([\d.]+ \w+)/); + return seedersMatch && parseSize(seedersMatch[1]) || 0; +} + +export function parseSize(sizeText) { + if (!sizeText) { + return 0; + } + let scale = 1; + if (sizeText.includes('TB')) { + scale = 1024 * 1024 * 1024 * 1024 + } else if (sizeText.includes('GB')) { + scale = 1024 * 1024 * 1024 + } else if (sizeText.includes('MB')) { + scale = 1024 * 1024; + } else if (sizeText.includes('kB')) { + scale = 1024; + } + return Math.floor(parseFloat(sizeText.replace(/,/g, '')) * scale); +} + +export const parseVideo = (name) => { + return videoNameParser(name + '.mp4'); +}; + +export const episodeTag = (season, episode) => { + const paddedSeason = season < 10 ? `0${season}` : season; + const paddedEpisode = episode < 10 ? `0${episode}` : episode; + return `S${paddedSeason}E${paddedEpisode}`; +}; + +export const cleanName = (name) => { + name = name.replace(/[._\-–()\[\]:,]/g, ' '); + name = name.replace(/\s+/g, ' '); + name = name.replace(/'/g, ''); + name = name.replace(/\\\\/g, '\\').replace(/\\\\'|\\'|\\\\"|\\"/g, ''); + return name; +}; + +export const insertIntoSortedArray = (sortedArray, newObject, sortingProperty, maxSize) => { + const indexToInsert = sortedArray.findIndex(item => item[sortingProperty] < newObject[sortingProperty]); + + if (indexToInsert === -1) { + if (sortedArray.length < maxSize) { + sortedArray.push(newObject); + return true; + } + return false; + } else { + // Insert the new object at the correct position to maintain the sorted order (descending) + sortedArray.splice(indexToInsert, 0, newObject); + // Trim the array if it exceeds maxSize + if (sortedArray.length > maxSize) { + sortedArray.pop(); + } + return true; + } +}; + +export const extraTag = (name, searchQuery) => { + const parsedName = parseVideo(name + '.mp4'); + let extraTag = cleanName(name); + searchQuery = cleanName(searchQuery); + + extraTag = extraTag.replace(new RegExp(searchQuery, 'gi'), ''); + extraTag = extraTag.replace(new RegExp(parsedName.name, 'gi'), ''); + + if (parsedName.year) { + extraTag = extraTag.replace(parsedName.year.toString(), ''); + } + + if (parsedName.season && parsedName.episode && parsedName.episode.length) { + extraTag = extraTag.replace(new RegExp(episodeTag(parsedName.season, parsedName.episode[0]), 'gi'), ''); + } + + extraTag = extraTag.trim(); + + let extraParts = extraTag.split(' '); + + if (parsedName.season && parsedName.episode && parsedName.episode.length) { + if (extraParts[0] && extraParts[0].length === 2 && !isNaN(extraParts[0])) { + const possibleEpTag = `${episodeTag(parsedName.season, parsedName.episode[0])}-${extraParts[0]}`; + if (name.toLowerCase().includes(possibleEpTag.toLowerCase())) { + extraParts[0] = possibleEpTag; + } + } + } + + const foundPart = name.toLowerCase().indexOf(extraParts[0].toLowerCase()); + + if (foundPart > -1) { + extraTag = name.substring(foundPart).replace(/[_()\[\],]/g, ' '); + + if ((extraTag.match(/\./g) || []).length > 1) { + extraTag = extraTag.replace(/\./g, ' '); + } + + extraTag = extraTag.replace(/\s+/g, ' '); + } + + return extraTag; +}; + + +export const transformData = async (data, query) => { + console.log("Transforming data for query " + data); + + let results = []; + + const parsedData = await parseString(data); + + if (!parsedData.rss.channel[0]?.item) { + return []; + } + + for (const rssItem of parsedData.rss.channel[0].item) { + let torznabData = {}; + + rssItem["torznab:attr"].forEach((torznabDataItem) => + Object.assign(torznabData, { + [torznabDataItem.$.name]: torznabDataItem.$.value, + }) + ); + + if (torznabData.infohash) { + + const [title, pubDate, category, size] = [rssItem.title[0], rssItem.pubDate[0], rssItem.category[0], rssItem.size[0]]; + + torznabData = { + ...torznabData, + title, + pubDate, + category, + size, + extraTag: extraTag(title, query.name) + }; + + if (insertIntoSortedArray(results, torznabData, 'size', jackettConfig.MAXIMUM_RESULTS)) { + processConfig.DEBUG && console.log(torznabData); + } + } + } + + + return results; +}; \ No newline at end of file diff --git a/src/node/addon-jackett/src/jackett/jackett.js b/src/node/addon-jackett/src/jackett/jackett.js new file mode 100644 index 0000000..0522dcb --- /dev/null +++ b/src/node/addon-jackett/src/jackett/jackett.js @@ -0,0 +1,41 @@ +import axios from 'axios'; +import {jackettConfig, processConfig} from "../lib/settings.js"; +import {cleanName, transformData} from "./jacketParser.js"; +import {jackettSearchQueries} from "./jackettQueries.js"; + +const JACKETT_SEARCH_URI = `${jackettConfig.URI}/api/v2.0/indexers/!status:failing,test:passed/results/torznab?apikey=${jackettConfig.API_KEY}`; + +const performRequest = async (url) => { + const response = await axios.get(url, { timeout: jackettConfig.TIMEOUT, responseType: 'text' }); + return !response.data ? null : response.data; +}; + +export const searchJackett = async (query) => { + if (processConfig.DEBUG) { + console.log('Beginning jackett query construction for', query); + } + + const name = encodeURIComponent(cleanName(query.name)); + + const queries = jackettSearchQueries(name, query.type, query.year, query.season, query.episode); + + const flatQueries = [].concat(...Object.values(queries)); + + const fetchPromises = flatQueries.map(searchQuery => { + const url = JACKETT_SEARCH_URI + searchQuery; + return performRequest(url); + }); + + const responses = await Promise.all(fetchPromises); + + let sortedResults = []; + + for (const response of responses) { + if (response) { + const transformedData = await transformData(response, query); + sortedResults = sortedResults.concat(transformedData); + } + } + + return sortedResults; +}; \ No newline at end of file diff --git a/src/node/addon-jackett/src/jackett/jackettQueries.js b/src/node/addon-jackett/src/jackett/jackettQueries.js new file mode 100644 index 0000000..eed8338 --- /dev/null +++ b/src/node/addon-jackett/src/jackett/jackettQueries.js @@ -0,0 +1,34 @@ +import {Type} from "../lib/types.js"; + +const moviesByYear = (cleanName, year) => `&cat=2000,2010,2020,2030,2040,2045,2050,2080&t=movie&q=${cleanName}&year=${year}`; +const movies = (cleanName) => `&cat=2000,2010,2020,2030,2040,2045,2050,2080&t=movie&q=${cleanName}`; +const seriesByEpisode = (cleanName, season, episode) => `&cat=5000,5010,5020,5030,5040,5045,5050,5060,5070,5080&t=tvsearch&q=${cleanName}&season=${season}&ep=${episode}`; + +const getMovieSearchQueries = (cleanName, year) => { + if (year) { + return { + moviesByYear: moviesByYear(cleanName, year), + }; + } + return { + movies: movies(cleanName), + }; +} + +const getSeriesSearchQueries = (cleanName, year, season, episode) => { + return { + seriesByEpisode: seriesByEpisode(cleanName, season, episode), + }; +} + +export const jackettSearchQueries = (cleanName, type, year, season, episode) => { + switch (type) { + case Type.MOVIE: + return getMovieSearchQueries(cleanName, year); + case Type.SERIES: + return getSeriesSearchQueries(cleanName, year, season, episode); + + default: + return { }; + } +}; \ No newline at end of file diff --git a/src/node/addon-jackett/src/lib/cache.js b/src/node/addon-jackett/src/lib/cache.js new file mode 100644 index 0000000..d51adb5 --- /dev/null +++ b/src/node/addon-jackett/src/lib/cache.js @@ -0,0 +1,100 @@ +import cacheManager from 'cache-manager'; +import mangodbStore from 'cache-manager-mongodb'; +import { isStaticUrl } from '../moch/static.js'; +import {cacheConfig} from "./settings.js"; + +const STREAM_KEY_PREFIX = `${cacheConfig.GLOBAL_KEY_PREFIX}|stream`; +const IMDB_KEY_PREFIX = `${cacheConfig.GLOBAL_KEY_PREFIX}|imdb`; +const AVAILABILITY_KEY_PREFIX = `${cacheConfig.GLOBAL_KEY_PREFIX}|availability`; +const RESOLVED_URL_KEY_PREFIX = `${cacheConfig.GLOBAL_KEY_PREFIX}|resolved`; + +const memoryCache = initiateMemoryCache(); +const remoteCache = initiateRemoteCache(); + +function initiateRemoteCache() { + if (cacheConfig.NO_CACHE) { + return null; + } else if (cacheConfig.MONGODB_URI) { + return cacheManager.caching({ + store: mangodbStore, + uri: cacheConfig.MONGODB_URI, + options: { + collection: 'jackettio_addon_collection', + socketTimeoutMS: 120000, + useNewUrlParser: true, + useUnifiedTopology: false, + ttl: cacheConfig.STREAM_EMPTY_TTL + }, + ttl: cacheConfig.STREAM_EMPTY_TTL, + ignoreCacheErrors: true + }); + } else { + return cacheManager.caching({ + store: 'memory', + ttl: cacheConfig.STREAM_EMPTY_TTL + }); + } +} + +function initiateMemoryCache() { + return cacheManager.caching({ + store: 'memory', + ttl: cacheConfig.MESSAGE_VIDEO_URL_TTL, + max: Infinity // infinite LRU cache size + }); +} + +function cacheWrap(cache, key, method, options) { + if (cacheConfig.NO_CACHE || !cache) { + return method(); + } + return cache.wrap(key, method, options); +} + +export function cacheWrapStream(id, method) { + return cacheWrap(remoteCache, `${STREAM_KEY_PREFIX}:${id}`, method, { + ttl: (streams) => streams.length ? cacheConfig.STREAM_TTL : cacheConfig.STREAM_EMPTY_TTL + }); +} + +export function cacheWrapImdbMetaData(id, method) { + return cacheWrap(remoteCache, `${IMDB_KEY_PREFIX}:${id}`, method, { + ttl: cacheConfig.IMDB_TTL + }); +} + +export function cacheWrapResolvedUrl(id, method) { + return cacheWrap(memoryCache, `${RESOLVED_URL_KEY_PREFIX}:${id}`, method, { + ttl: (url) => isStaticUrl(url) ? cacheConfig.MESSAGE_VIDEO_URL_TTL : cacheConfig.STREAM_TTL + }); +} + +export function cacheAvailabilityResults(results) { + Object.keys(results) + .forEach(infohash => { + const key = `${AVAILABILITY_KEY_PREFIX}:${infohash}`; + const value = results[infohash]; + const ttl = value?.length ? cacheConfig.AVAILABILITY_TTL : cacheConfig.AVAILABILITY_EMPTY_TTL; + memoryCache.set(key, value, { ttl }) + }); + return results; +} + +export function getCachedAvailabilityResults(infohashes) { + const keys = infohashes.map(infohash => `${AVAILABILITY_KEY_PREFIX}:${infohash}`) + return new Promise(resolve => { + memoryCache.mget(...keys, (error, result) => { + if (error) { + console.log('Failed retrieve availability cache', error) + return resolve({}); + } + const availabilityResults = {}; + infohashes.forEach((infohash, index) => { + if (result[index]) { + availabilityResults[infohash] = result[index]; + } + }); + resolve(availabilityResults); + }) + }); +} diff --git a/src/node/addon-jackett/src/lib/cinemetaProvider.js b/src/node/addon-jackett/src/lib/cinemetaProvider.js new file mode 100644 index 0000000..faf38a4 --- /dev/null +++ b/src/node/addon-jackett/src/lib/cinemetaProvider.js @@ -0,0 +1,31 @@ +import axios from "axios"; +import {cacheWrapImdbMetaData} from "./cache.js"; +import {getRandomUserAgent} from "./requestHelper.js"; +import {cinemetaConfig, processConfig} from "./settings.js"; + +const cinemetaUri = cinemetaConfig.URI; + +export const getMetaData = (args) => { + const [imdbId] = args.id.split(':'); + const {type} = args; + + return cacheWrapImdbMetaData(args.id, () => getInfoForImdbId(imdbId, type)); +} + +const getInfoForImdbId = async (imdbId, type) => { + const requestUri = `${cinemetaUri}/${type}/${imdbId}.json`; + const options = { timeout: 30000, headers: { 'User-Agent': getRandomUserAgent() } }; + + if (processConfig.DEBUG) { + console.log(`Getting info for ${imdbId} of type ${type}`); + console.log(`Request URI: ${requestUri}`); + } + + try { + const { data: response } = await axios.get(requestUri, options); + return response.meta; + } catch (error) { + console.log(error); + return {}; + } +}; \ No newline at end of file diff --git a/src/node/addon-jackett/src/lib/configuration.js b/src/node/addon-jackett/src/lib/configuration.js new file mode 100644 index 0000000..8b89123 --- /dev/null +++ b/src/node/addon-jackett/src/lib/configuration.js @@ -0,0 +1,25 @@ +import { DebridOptions } from '../moch/options.js'; + +const keysToSplit = [DebridOptions.key]; + +export function parseConfiguration(configuration) { + if (!configuration) { + return undefined; + } + + const configValues = configuration.split('|') + .reduce((map, next) => { + const [key, value] = next.split('='); + if (key && value) { + map[key.toLowerCase()] = value; + } + return map; + }, {}); + + keysToSplit + .filter(key => configValues[key]) + .forEach(key => configValues[key] = configValues[key].split(',') + .map(value => keysToUppercase.includes(key) ? value.toUpperCase() : value.toLowerCase())) + + return configValues; +} \ No newline at end of file diff --git a/addon/lib/extension.js b/src/node/addon-jackett/src/lib/extension.js similarity index 100% rename from addon/lib/extension.js rename to src/node/addon-jackett/src/lib/extension.js diff --git a/src/node/addon-jackett/src/lib/landingTemplate.js b/src/node/addon-jackett/src/lib/landingTemplate.js new file mode 100644 index 0000000..befdc70 --- /dev/null +++ b/src/node/addon-jackett/src/lib/landingTemplate.js @@ -0,0 +1,385 @@ +const STYLESHEET = ` +* { + box-sizing: border-box; +} + +body, +html { + margin: 0; + padding: 0; + width: 100%; + height: 100% +} + +html { + background-size: auto 100%; + background-size: cover; + background-position: center center; + background-repeat: repeat-y; +} + +body { + display: flex; + background-color: transparent; + font-family: 'Open Sans', Arial, sans-serif; + color: white; +} + +h1 { + font-size: 4.5vh; + font-weight: 700; +} + +h2 { + font-size: 2.2vh; + font-weight: normal; + font-style: italic; + opacity: 0.8; +} + +h3 { + font-size: 2.2vh; +} + +h1, +h2, +h3, +p, +label { + margin: 0; + text-shadow: 0 0 1vh rgba(0, 0, 0, 0.15); +} + +p { + font-size: 1.75vh; +} + +ul { + font-size: 1.75vh; + margin: 0; + margin-top: 1vh; + padding-left: 3vh; +} + +a { + color: green +} + +a.install-link { + text-decoration: none +} + +.install-button { + border: 0; + outline: 0; + color: white; + background: #8A5AAB; + padding: 1.2vh 3.5vh; + margin: auto; + text-align: center; + font-family: 'Open Sans', Arial, sans-serif; + font-size: 2.2vh; + font-weight: 600; + cursor: pointer; + display: block; + box-shadow: 0 0.5vh 1vh rgba(0, 0, 0, 0.2); + transition: box-shadow 0.1s ease-in-out; +} + +.install-button:hover { + box-shadow: none; +} + +.install-button:active { + box-shadow: 0 0 0 0.5vh white inset; +} + +#addon { + width: 90vh; + margin: auto; + padding-left: 10%; + padding-right: 10%; + background: rgba(0, 0, 0, 0.60); +} + +.logo { + height: 14vh; + width: 14vh; + margin: auto; + margin-bottom: 3vh; +} + +.logo img { + width: 100%; +} + +.name, .version { + display: inline-block; + vertical-align: top; +} + +.name { + line-height: 5vh; +} + +.version { + position: absolute; + line-height: 5vh; + margin-left: 1vh; + opacity: 0.8; +} + +.contact { + left: 0; + bottom: 4vh; + width: 100%; + margin-top: 1vh; + text-align: center; +} + +.contact a { + font-size: 1.4vh; + font-style: italic; +} + +.separator { + margin-bottom: 4vh; +} + +.label { + font-size: 2.2vh; + font-weight: 600; + padding: 0; + line-height: inherit; +} + +.btn-group, .multiselect-container { + width: 100%; +} + +.btn { + text-align: left; +} + +.multiselect-container { + border: 0; + border-radius: 0; +} + +.input, .btn { + width: 100%; + margin: auto; + margin-bottom: 10px; + padding: 6px 12px; + border: 0; + border-radius: 0; + outline: 0; + color: #333; + background-color: rgb(255, 255, 255); + box-shadow: 0 0.5vh 1vh rgba(0, 0, 0, 0.2); +} + +.input:focus, .btn:focus { + outline: none; + box-shadow: 0 0 0 2pt rgb(30, 144, 255, 0.7); +} +`; + +import { MochOptions } from '../moch/moch.js'; +import { DebridOptions } from '../moch/options.js'; + +export default function landingTemplate(manifest, config = {}) { + const limit = config.limit || ''; + + const debridProvider = Object.keys(MochOptions).find(mochKey => config[mochKey]); + const debridOptions = config[DebridOptions.key] || []; + const realDebridApiKey = config[MochOptions.realdebrid.key] || ''; + const premiumizeApiKey = config[MochOptions.premiumize.key] || ''; + const allDebridApiKey = config[MochOptions.alldebrid.key] || ''; + const debridLinkApiKey = config[MochOptions.debridlink.key] || ''; + const offcloudApiKey = config[MochOptions.offcloud.key] || ''; + const putioKey = config[MochOptions.putio.key] || ''; + const putioClientId = putioKey.replace(/@.*/, ''); + const putioToken = putioKey.replace(/.*@/, ''); + + const background = manifest.background || 'https://dl.strem.io/addon-background.jpg'; + const logo = manifest.logo || 'https://dl.strem.io/addon-logo.png'; + const debridProvidersHTML = Object.values(MochOptions) + .map(moch => ``) + .join('\n'); + const debridOptionsHTML = Object.values(DebridOptions.options) + .map(option => ``) + .join('\n'); + + return ` + + + + + + ${manifest.name} - Stremio Addon + + + + + + + + + + + + +
+ +

${manifest.name}

+

${manifest.version || '0.0.0'}

+

${manifest.description || ''}

+ +
+ + + + + + + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ + +
+ +
+ + + +
+ +
+ + +
+ +
+ + + + +
+

Or paste into Stremio search bar after clicking install

+
+ +
+
+ + + + ` +} diff --git a/src/node/addon-jackett/src/lib/magnetHelper.js b/src/node/addon-jackett/src/lib/magnetHelper.js new file mode 100644 index 0000000..c4e57ed --- /dev/null +++ b/src/node/addon-jackett/src/lib/magnetHelper.js @@ -0,0 +1,59 @@ +import axios from 'axios'; +import magnet from 'magnet-uri'; +import { getRandomUserAgent } from './requestHelper.js'; + +const TRACKERS_URL = 'https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt'; +const DEFAULT_TRACKERS = [ + "udp://47.ip-51-68-199.eu:6969/announce", + "udp://9.rarbg.me:2940", + "udp://9.rarbg.to:2820", + "udp://exodus.desync.com:6969/announce", + "udp://explodie.org:6969/announce", + "udp://ipv4.tracker.harry.lu:80/announce", + "udp://open.stealth.si:80/announce", + "udp://opentor.org:2710/announce", + "udp://opentracker.i2p.rocks:6969/announce", + "udp://retracker.lanta-net.ru:2710/announce", + "udp://tracker.cyberia.is:6969/announce", + "udp://tracker.dler.org:6969/announce", + "udp://tracker.ds.is:6969/announce", + "udp://tracker.internetwarriors.net:1337", + "udp://tracker.openbittorrent.com:6969/announce", + "udp://tracker.opentrackr.org:1337/announce", + "udp://tracker.tiny-vps.com:6969/announce", + "udp://tracker.torrent.eu.org:451/announce", + "udp://valakas.rollo.dnsabr.com:2710/announce", + "udp://www.torrent.eu.org:451/announce", +] + +let BEST_TRACKERS = []; + +export async function getMagnetLink(infohash) { + const trackers = [].concat(DEFAULT_TRACKERS).concat(BEST_TRACKERS); + return magnet.encode({ infohash: infohash, announce: trackers }); +} + +export async function initBestTrackers() { + BEST_TRACKERS = await getBestTrackers(); +} + +async function getBestTrackers(retry = 2) { + const options = { timeout: 30000, headers: { 'User-Agent': getRandomUserAgent() } }; + return axios.get(TRACKERS_URL, options) + .then(response => response?.data?.trim()?.split('\n\n') || []) + .catch(error => { + if (retry === 0) { + console.log(`Failed retrieving best trackers: ${error.message}`); + throw error; + } + return getBestTrackers(retry - 1); + }); +} + +export function getSources(magnetInfo) { + if (!magnetInfo.announce) { + return null; + } + const trackers = Array.isArray(magnetInfo.announce) ? magnetInfo.announce : magnetInfo.announce.split(','); + return trackers.map(tracker => `tracker:${tracker}`).concat(`dht:${magnetInfo.infohash}`); +} \ No newline at end of file diff --git a/addon/lib/manifest.js b/src/node/addon-jackett/src/lib/manifest.js similarity index 53% rename from addon/lib/manifest.js rename to src/node/addon-jackett/src/lib/manifest.js index 0f5077a..d4c19af 100644 --- a/addon/lib/manifest.js +++ b/src/node/addon-jackett/src/lib/manifest.js @@ -1,30 +1,23 @@ import { MochOptions } from '../moch/moch.js'; -import { Providers } from './filter.js'; import { showDebridCatalog } from '../moch/options.js'; -import { getManifestOverride } from './configuration.js'; import { Type } from './types.js'; -const DefaultProviders = Providers.options.map(provider => provider.key); const CatalogMochs = Object.values(MochOptions).filter(moch => moch.catalog); export function manifest(config = {}) { - const overrideManifest = getManifestOverride(config); - const baseManifest = { - id: 'com.stremio.torrentio-sh.addon', - version: '0.0.14', - name: getName(overrideManifest, config), + return { + id: 'com.stremio.jackettio-addon', + version: '0.0.1', + name: getName(config), description: getDescription(config), catalogs: getCatalogs(config), resources: getResources(config), types: [Type.MOVIE, Type.SERIES, Type.ANIME, Type.OTHER], - background: `https://images6.alphacoders.com/134/1344105.png`, - logo: `https://i.ibb.co/w4BnkC9/GwxAcDV.png`, behaviorHints: { configurable: true, - configurationRequired: false + configurationRequired: false, } }; - return Object.assign(baseManifest, overrideManifest); } export function dummyManifest() { @@ -34,8 +27,8 @@ export function dummyManifest() { return manifestDefault; } -function getName(manifest, config) { - const rootName = manifest?.name || 'Torrentio-sh'; +function getName(config) { + const rootName = 'jackettio'; const mochSuffix = Object.values(MochOptions) .filter(moch => config[moch.key]) .map(moch => moch.shortName) @@ -44,26 +37,14 @@ function getName(manifest, config) { } function getDescription(config) { - const providersList = config[Providers.key] || DefaultProviders; - const enabledProvidersDesc = Providers.options - .map(provider => `${provider.label}${providersList.includes(provider.key) ? '(+)' : '(-)'}`) - .join(', ') - const enabledMochs = Object.values(MochOptions) - .filter(moch => config[moch.key]) - .map(moch => moch.name) - .join(' & '); - const possibleMochs = Object.values(MochOptions).map(moch => moch.name).join('/') - const mochsDesc = enabledMochs ? ` and ${enabledMochs} enabled` : ''; - return 'Provides torrent streams from scraped torrent providers.' - + ` Currently supports ${enabledProvidersDesc}${mochsDesc}.` - + ` To configure providers, ${possibleMochs} support and other settings visit https://torrentio.strem.fun` + return 'Freedom is not worth having if it does not include the freedom to make mistakes...' } function getCatalogs(config) { return CatalogMochs .filter(moch => showDebridCatalog(config) && config[moch.key]) .map(moch => ({ - id: `torrentio-${moch.key}`, + id: `jackettio-${moch.key}`, name: `${moch.name}`, type: 'other', extra: [{ name: 'skip' }], diff --git a/addon/lib/promises.js b/src/node/addon-jackett/src/lib/promises.js similarity index 100% rename from addon/lib/promises.js rename to src/node/addon-jackett/src/lib/promises.js diff --git a/addon/lib/requestHelper.js b/src/node/addon-jackett/src/lib/requestHelper.js similarity index 100% rename from addon/lib/requestHelper.js rename to src/node/addon-jackett/src/lib/requestHelper.js diff --git a/src/node/addon-jackett/src/lib/settings.js b/src/node/addon-jackett/src/lib/settings.js new file mode 100644 index 0000000..6d53bac --- /dev/null +++ b/src/node/addon-jackett/src/lib/settings.js @@ -0,0 +1,42 @@ +const parseBool = (boolString, defaultValue)=> { + const isString = typeof boolString === 'string' || boolString instanceof String; + + if (!isString) { + return defaultValue; + } + + return boolString.toLowerCase() === 'true' ? true : defaultValue; +} + +export const jackettConfig = { + URI: process.env.JACKETT_URI, + API_KEY: process.env.JACKETT_API_KEY, + TIMEOUT: parseInt(process.env.JACKETT_TIMEOUT || 10000), + MAXIMUM_RESULTS: parseInt(process.env.JACKETT_MAXIMUM_RESULTS || 20), +} + +export const processConfig = { + DEBUG: parseBool(process.env.DEBUG_MODE, false), + PORT: parseInt(process.env.PORT || 7001), +} + +export const cinemetaConfig = { + URI: process.env.CINEMETA_URI || 'https://v3-cinemeta.strem.io/meta', +} + +export const cacheConfig = { + MONGODB_URI: process.env.MONGODB_URI, + NO_CACHE: parseBool(process.env.NO_CACHE, false), + IMDB_TTL: parseInt(process.env.IMDB_TTL || 60 * 60 * 4), // 4 Hours + STREAM_TTL: parseInt(process.env.STREAM_TTL || 60 * 60 * 4), // 1 Hour + STREAM_EMPTY_TTL: parseInt(process.env.STREAM_EMPTY_TTL || 60), // 60 seconds + AVAILABILITY_TTL: parseInt(process.env.AVAILABILITY_TTL || 8 * 60 * 60), // 8 hours + AVAILABILITY_EMPTY_TTL: parseInt(process.env.AVAILABILITY_EMPTY_TTL || 30 * 60), // 30 minutes + MESSAGE_VIDEO_URL_TTL: parseInt(process.env.MESSAGE_VIDEO_URL_TTL || 60), // 1 minutes + CACHE_MAX_AGE: parseInt(process.env.CACHE_MAX_AGE) || 60 * 60, // 1 hour in seconds + CACHE_MAX_AGE_EMPTY: parseInt(process.env.CACHE_MAX_AGE_EMPTY) || 60, // 60 seconds + CATALOG_CACHE_MAX_AGE: parseInt(process.env.CATALOG_CACHE_MAX_AGE) || 20 * 60, // 20 minutes + STALE_REVALIDATE_AGE: parseInt(process.env.STALE_REVALIDATE_AGE) || 4 * 60 * 60, // 4 hours + STALE_ERROR_AGE: parseInt(process.env.STALE_ERROR_AGE) || 7 * 24 * 60 * 60, // 7 days + GLOBAL_KEY_PREFIX: process.env.GLOBAL_KEY_PREFIX || 'jackettio-addon', +} \ No newline at end of file diff --git a/src/node/addon-jackett/src/lib/sort.js b/src/node/addon-jackett/src/lib/sort.js new file mode 100644 index 0000000..d5ccc89 --- /dev/null +++ b/src/node/addon-jackett/src/lib/sort.js @@ -0,0 +1,16 @@ +import {extractSize} from "../jackett/jacketParser.js"; + +export default function sortStreams(streams, config) { + const limit = /^[1-9][0-9]*$/.test(config.limit) && parseInt(config.limit) || undefined; + + return sortBySize(streams, limit); +} + +function sortBySize(streams, limit) { + return streams + .sort((a, b) => { + const aSize = extractSize(a.title); + const bSize = extractSize(b.title); + return bSize - aSize; + }).slice(0, limit); +} diff --git a/src/node/addon-jackett/src/lib/streamInfo.js b/src/node/addon-jackett/src/lib/streamInfo.js new file mode 100644 index 0000000..bc54d9e --- /dev/null +++ b/src/node/addon-jackett/src/lib/streamInfo.js @@ -0,0 +1,73 @@ +import {decode} from "magnet-uri"; +import titleParser from 'parse-torrent-title'; +import {getSources} from './magnetHelper.js'; +import { Type } from './types.js'; + +const ADDON_NAME = 'jackettio'; +const UNKNOWN_SIZE = 300000000; + +export function toStreamInfo(record, type) { + const torrentInfo = titleParser.parse(record.title); + const fileInfo = titleParser.parse(record.title); + const title = joinDetailParts( + [ + joinDetailParts([record.title.replace(/[, ]+/g, ' ')]), + joinDetailParts([ + joinDetailParts([formatSize(record.size)], '💾 ') + ]), + ], + '', + '\n' + ); + const name = joinDetailParts( + [ + joinDetailParts([ADDON_NAME]), + ], + '', + '\n' + ); + const bingeGroupParts = getBingeGroupParts(record, torrentInfo, fileInfo, type); + const bingeGroup = joinDetailParts(bingeGroupParts, "jackettio|", "|") + const behaviorHints = bingeGroup ? { bingeGroup } : undefined; + + const magnetInfo = decode(record.magneturl) + + return cleanOutputObject({ + name: name, + title: title, + infohash: record.infohash, + behaviorHints: behaviorHints, + sources: getSources(magnetInfo), + }); +} + +function joinDetailParts(parts, prefix = '', delimiter = ' ') { + const filtered = parts.filter((part) => part !== undefined && part !== null).join(delimiter); + + return filtered.length > 0 ? `${prefix}${filtered}` : undefined; +} + +function formatSize(size) { + if (!size) { + return undefined; + } + if (size === UNKNOWN_SIZE) { + return undefined; + } + const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024)); + return Number((size / Math.pow(1024, i)).toFixed(2)) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; +} + +function getBingeGroupParts(record, sameInfo, quality, torrentInfo, fileInfo, type) { + if (type === Type.MOVIE) { + return [quality]; + + } else if (sameInfo) { + return [quality]; + } + return [record.infohash]; +} + +function cleanOutputObject(object) { + return Object.fromEntries(Object.entries(object).filter(([_, v]) => v != null)); +} diff --git a/addon/lib/types.js b/src/node/addon-jackett/src/lib/types.js similarity index 100% rename from addon/lib/types.js rename to src/node/addon-jackett/src/lib/types.js diff --git a/src/node/addon-jackett/src/moch/alldebrid.js b/src/node/addon-jackett/src/moch/alldebrid.js new file mode 100644 index 0000000..6af313a --- /dev/null +++ b/src/node/addon-jackett/src/moch/alldebrid.js @@ -0,0 +1,195 @@ +import AllDebridClient from 'all-debrid-api'; +import { isVideo, isArchive } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { Type } from '../lib/types.js'; +import { BadTokenError, AccessDeniedError, sameFilename } from './mochHelper.js'; +import StaticResponse from './static.js'; + +const KEY = 'alldebrid'; +const AGENT = 'torrentio'; + +export async function getCachedStreams(streams, apiKey) { + const options = await getDefaultOptions(); + const AD = new AllDebridClient(apiKey, options); + const hashes = streams.map(stream => stream.infohash); + const available = await AD.magnet.instant(hashes) + .catch(error => { + if (toCommonError(error)) { + return Promise.reject(error); + } + console.warn(`Failed AllDebrid cached [${hashes[0]}] torrent availability request:`, error); + return undefined; + }); + return available?.data?.magnets && streams + .reduce((mochStreams, stream) => { + const cachedEntry = available.data.magnets.find(magnet => stream.infohash === magnet.hash.toLowerCase()); + const streamTitleParts = stream.title.replace(/\n👤.*/s, '').split('\n'); + const fileName = streamTitleParts[streamTitleParts.length - 1]; + const fileIndex = streamTitleParts.length === 2 ? stream.fileIdx : null; + const encodedFileName = encodeURIComponent(fileName); + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/${encodedFileName}/${fileIndex}`, + cached: cachedEntry?.instant + } + return mochStreams; + }, {}) +} + +export async function getCatalog(apiKey, offset = 0) { + if (offset > 0) { + return []; + } + const options = await getDefaultOptions(); + const AD = new AllDebridClient(apiKey, options); + return AD.magnet.status() + .then(response => response.data.magnets) + .then(torrents => (torrents || []) + .filter(torrent => torrent && statusReady(torrent.statusCode)) + .map(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.filename + }))); +} + +export async function getItemMeta(itemId, apiKey) { + const options = await getDefaultOptions(); + const AD = new AllDebridClient(apiKey, options); + return AD.magnet.status(itemId) + .then(response => response.data.magnets) + .then(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.filename, + infohash: torrent.hash.toLowerCase(), + videos: torrent.links + .filter(file => isVideo(file.filename)) + .map((file, index) => ({ + id: `${KEY}:${torrent.id}:${index}`, + title: file.filename, + released: new Date(torrent.uploadDate * 1000 - index).toISOString(), + streams: [{ url: `${apiKey}/${torrent.hash.toLowerCase()}/${encodeURIComponent(file.filename)}/${index}` }] + })) + })) +} + +export async function resolve({ ip, apiKey, infohash, cachedEntryInfo, fileIndex }) { + console.log(`Unrestricting AllDebrid ${infohash} [${fileIndex}]`); + const options = await getDefaultOptions(ip); + const AD = new AllDebridClient(apiKey, options); + + return _resolve(AD, infohash, cachedEntryInfo, fileIndex) + .catch(error => { + if (errorExpiredSubscriptionError(error)) { + console.log(`Access denied to AllDebrid ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } else if (error.code === 'MAGNET_TOO_MANY') { + console.log(`Deleting and retrying adding to AllDebrid ${infohash} [${fileIndex}]...`); + return _deleteAndRetry(AD, infohash, cachedEntryInfo, fileIndex); + } + return Promise.reject(`Failed AllDebrid adding torrent ${JSON.stringify(error)}`); + }); +} + +async function _resolve(AD, infohash, cachedEntryInfo, fileIndex) { + const torrent = await _createOrFindTorrent(AD, infohash); + if (torrent && statusReady(torrent.statusCode)) { + return _unrestrictLink(AD, torrent, cachedEntryInfo, fileIndex); + } else if (torrent && statusDownloading(torrent.statusCode)) { + console.log(`Downloading to AllDebrid ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } else if (torrent && statusHandledError(torrent.statusCode)) { + console.log(`Retrying downloading to AllDebrid ${infohash} [${fileIndex}]...`); + return _retryCreateTorrent(AD, infohash, cachedEntryInfo, fileIndex); + } + + return Promise.reject(`Failed AllDebrid adding torrent ${JSON.stringify(torrent)}`); +} + +async function _createOrFindTorrent(AD, infohash) { + return _findTorrent(AD, infohash) + .catch(() => _createTorrent(AD, infohash)); +} + +async function _retryCreateTorrent(AD, infohash, encodedFileName, fileIndex) { + const newTorrent = await _createTorrent(AD, infohash); + return newTorrent && statusReady(newTorrent.statusCode) + ? _unrestrictLink(AD, newTorrent, encodedFileName, fileIndex) + : StaticResponse.FAILED_DOWNLOAD; +} + +async function _deleteAndRetry(AD, infohash, encodedFileName, fileIndex) { + const torrents = await AD.magnet.status().then(response => response.data.magnets); + const lastTorrent = torrents[torrents.length - 1]; + return AD.magnet.delete(lastTorrent.id) + .then(() => _retryCreateTorrent(AD, infohash, encodedFileName, fileIndex)); +} + +async function _findTorrent(AD, infohash) { + const torrents = await AD.magnet.status().then(response => response.data.magnets); + const foundTorrents = torrents.filter(torrent => torrent.hash.toLowerCase() === infohash); + const nonFailedTorrent = foundTorrents.find(torrent => !statusError(torrent.statusCode)); + const foundTorrent = nonFailedTorrent || foundTorrents[0]; + return foundTorrent || Promise.reject('No recent torrent found'); +} + +async function _createTorrent(AD, infohash) { + const magnetLink = await getMagnetLink(infohash); + const uploadResponse = await AD.magnet.upload(magnetLink); + const torrentId = uploadResponse.data.magnets[0].id; + return AD.magnet.status(torrentId).then(statusResponse => statusResponse.data.magnets); +} + +async function _unrestrictLink(AD, torrent, encodedFileName, fileIndex) { + const targetFileName = decodeURIComponent(encodedFileName); + const videos = torrent.links.filter(link => isVideo(link.filename)); + const targetVideo = Number.isInteger(fileIndex) + ? videos.find(video => sameFilename(targetFileName, video.filename)) + : videos.sort((a, b) => b.size - a.size)[0]; + + if (!targetVideo && torrent.links.every(link => isArchive(link.filename))) { + console.log(`Only AllDebrid archive is available for [${torrent.hash}] ${encodedFileName}`) + return StaticResponse.FAILED_RAR; + } + if (!targetVideo || !targetVideo.link || !targetVideo.link.length) { + return Promise.reject(`No AllDebrid links found for [${torrent.hash}] ${encodedFileName}`); + } + const unrestrictedLink = await AD.link.unlock(targetVideo.link).then(response => response.data.link); + console.log(`Unrestricted AllDebrid ${torrent.hash} [${fileIndex}] to ${unrestrictedLink}`); + return unrestrictedLink; +} + +async function getDefaultOptions(ip) { + return { base_agent: AGENT, timeout: 10000 }; +} + +export function toCommonError(error) { + if (error && error.code === 'AUTH_BAD_APIKEY') { + return BadTokenError; + } + if (error && error.code === 'AUTH_USER_BANNED') { + return AccessDeniedError; + } + return undefined; +} + +function statusError(statusCode) { + return [5, 6, 7, 8, 9, 10, 11].includes(statusCode); +} + +function statusHandledError(statusCode) { + return [5, 7, 9, 10, 11].includes(statusCode); +} + +function statusDownloading(statusCode) { + return [0, 1, 2, 3].includes(statusCode); +} + +function statusReady(statusCode) { + return statusCode === 4; +} + +function errorExpiredSubscriptionError(error) { + return ['AUTH_BAD_APIKEY', 'MUST_BE_PREMIUM', 'MAGNET_MUST_BE_PREMIUM', 'FREE_TRIAL_LIMIT_REACHED', 'AUTH_USER_BANNED'] + .includes(error.code); +} diff --git a/src/node/addon-jackett/src/moch/debridlink.js b/src/node/addon-jackett/src/moch/debridlink.js new file mode 100644 index 0000000..cd617ef --- /dev/null +++ b/src/node/addon-jackett/src/moch/debridlink.js @@ -0,0 +1,155 @@ +import DebridLinkClient from 'debrid-link-api'; +import { isVideo, isArchive } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { Type } from '../lib/types.js'; +import { chunkArray, BadTokenError } from './mochHelper.js'; +import StaticResponse from './static.js'; + +const KEY = 'debridlink'; + +export async function getCachedStreams(streams, apiKey) { + const options = await getDefaultOptions(); + const DL = new DebridLinkClient(apiKey, options); + const hashBatches = chunkArray(streams.map(stream => stream.infohash), 50) + .map(batch => batch.join(',')); + const available = await Promise.all(hashBatches.map(hashes => DL.seedbox.cached(hashes))) + .then(results => results.map(result => result.value)) + .then(results => results.reduce((all, result) => Object.assign(all, result), {})) + .catch(error => { + if (toCommonError(error)) { + return Promise.reject(error); + } + console.warn('Failed DebridLink cached torrent availability request:', error); + return undefined; + }); + return available && streams + .reduce((mochStreams, stream) => { + const cachedEntry = available[stream.infohash]; + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/null/${stream.fileIdx}`, + cached: !!cachedEntry + }; + return mochStreams; + }, {}) +} + +export async function getCatalog(apiKey, offset = 0) { + if (offset > 0) { + return []; + } + const options = await getDefaultOptions(); + const DL = new DebridLinkClient(apiKey, options); + return DL.seedbox.list() + .then(response => response.value) + .then(torrents => (torrents || []) + .filter(torrent => torrent && statusReady(torrent)) + .map(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.name + }))); +} + +export async function getItemMeta(itemId, apiKey, ip) { + const options = await getDefaultOptions(ip); + const DL = new DebridLinkClient(apiKey, options); + return DL.seedbox.list(itemId) + .then(response => response.value[0]) + .then(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.name, + infohash: torrent.hashString.toLowerCase(), + videos: torrent.files + .filter(file => isVideo(file.name)) + .map((file, index) => ({ + id: `${KEY}:${torrent.id}:${index}`, + title: file.name, + released: new Date(torrent.created * 1000 - index).toISOString(), + streams: [{ url: file.downloadUrl }] + })) + })) +} + +export async function resolve({ ip, apiKey, infohash, fileIndex }) { + console.log(`Unrestricting DebridLink ${infohash} [${fileIndex}]`); + const options = await getDefaultOptions(ip); + const DL = new DebridLinkClient(apiKey, options); + + return _resolve(DL, infohash, fileIndex) + .catch(error => { + if (errorExpiredSubscriptionError(error)) { + console.log(`Access denied to DebridLink ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } + return Promise.reject(`Failed DebridLink adding torrent ${JSON.stringify(error)}`); + }); +} + +async function _resolve(DL, infohash, fileIndex) { + const torrent = await _createOrFindTorrent(DL, infohash); + if (torrent && statusReady(torrent)) { + return _unrestrictLink(DL, torrent, fileIndex); + } else if (torrent && statusDownloading(torrent)) { + console.log(`Downloading to DebridLink ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } + + return Promise.reject(`Failed DebridLink adding torrent ${JSON.stringify(torrent)}`); +} + +async function _createOrFindTorrent(DL, infohash) { + return _findTorrent(DL, infohash) + .catch(() => _createTorrent(DL, infohash)); +} + +async function _findTorrent(DL, infohash) { + const torrents = await DL.seedbox.list().then(response => response.value); + const foundTorrents = torrents.filter(torrent => torrent.hashString.toLowerCase() === infohash); + return foundTorrents[0] || Promise.reject('No recent torrent found'); +} + +async function _createTorrent(DL, infohash) { + const magnetLink = await getMagnetLink(infohash); + const uploadResponse = await DL.seedbox.add(magnetLink, null, true); + return uploadResponse.value; +} + +async function _unrestrictLink(DL, torrent, fileIndex) { + const targetFile = Number.isInteger(fileIndex) + ? torrent.files[fileIndex] + : torrent.files.filter(file => file.downloadPercent === 100).sort((a, b) => b.size - a.size)[0]; + + if (!targetFile && torrent.files.every(file => isArchive(file.downloadUrl))) { + console.log(`Only DebridLink archive is available for [${torrent.hashString}] ${fileIndex}`) + return StaticResponse.FAILED_RAR; + } + if (!targetFile || !targetFile.downloadUrl) { + return Promise.reject(`No DebridLink links found for index ${fileIndex} in: ${JSON.stringify(torrent)}`); + } + console.log(`Unrestricted DebridLink ${torrent.hashString} [${fileIndex}] to ${targetFile.downloadUrl}`); + return targetFile.downloadUrl; +} + +async function getDefaultOptions(ip) { + return { ip, timeout: 10000 }; +} + +export function toCommonError(error) { + if (error === 'badToken') { + return BadTokenError; + } + return undefined; +} + +function statusDownloading(torrent) { + return torrent.downloadPercent < 100 +} + +function statusReady(torrent) { + return torrent.downloadPercent === 100; +} + +function errorExpiredSubscriptionError(error) { + return ['freeServerOverload', 'maxTorrent', 'maxLink', 'maxLinkHost', 'maxData', 'maxDataHost'].includes(error); +} diff --git a/src/node/addon-jackett/src/moch/moch.js b/src/node/addon-jackett/src/moch/moch.js new file mode 100644 index 0000000..c9e66dd --- /dev/null +++ b/src/node/addon-jackett/src/moch/moch.js @@ -0,0 +1,240 @@ +import namedQueue from 'named-queue'; +import { cacheWrapResolvedUrl } from '../lib/cache.js'; +import { timeout } from '../lib/promises.js'; +import * as alldebrid from './alldebrid.js'; +import * as debridlink from './debridlink.js'; +import { BadTokenError, streamFilename, AccessDeniedError, enrichMeta } from './mochHelper.js'; +import * as offcloud from './offcloud.js'; +import * as options from './options.js'; +import * as premiumize from './premiumize.js'; +import * as putio from './putio.js'; +import * as realdebrid from './realdebrid.js'; +import StaticResponse, { isStaticUrl } from './static.js'; + +const RESOLVE_TIMEOUT = 2 * 60 * 1000; // 2 minutes +const MIN_API_KEY_SYMBOLS = 15; +const TOKEN_BLACKLIST = []; +export const MochOptions = { + realdebrid: { + key: 'realdebrid', + instance: realdebrid, + name: "RealDebrid", + shortName: 'RD', + catalog: true + }, + premiumize: { + key: 'premiumize', + instance: premiumize, + name: 'Premiumize', + shortName: 'PM', + catalog: true + }, + alldebrid: { + key: 'alldebrid', + instance: alldebrid, + name: 'AllDebrid', + shortName: 'AD', + catalog: true + }, + debridlink: { + key: 'debridlink', + instance: debridlink, + name: 'DebridLink', + shortName: 'DL', + catalog: true + }, + offcloud: { + key: 'offcloud', + instance: offcloud, + name: 'Offcloud', + shortName: 'OC', + catalog: true + }, + putio: { + key: 'putio', + instance: putio, + name: 'Put.io', + shortName: 'Putio', + catalog: true + } +}; + +const unrestrictQueues = {} +Object.values(MochOptions) + .map(moch => moch.key) + .forEach(mochKey => unrestrictQueues[mochKey] = new namedQueue((task, callback) => task.method() + .then(result => callback(false, result)) + .catch((error => callback(error))), 200)); + +export function hasMochConfigured(config) { + return Object.keys(MochOptions).find(moch => config?.[moch]) +} + +export async function applyMochs(streams, config) { + if (!streams?.length || !hasMochConfigured(config)) { + return streams; + } + return Promise.all(Object.keys(config) + .filter(configKey => MochOptions[configKey]) + .map(configKey => MochOptions[configKey]) + .map(moch => { + if (isInvalidToken(config[moch.key], moch.key)) { + return { moch, error: BadTokenError }; + } + return moch.instance.getCachedStreams(streams, config[moch.key]) + .then(mochStreams => ({ moch, mochStreams })) + .catch(rawError => { + const error = moch.instance.toCommonError(rawError) || rawError; + if (error === BadTokenError) { + blackListToken(config[moch.key], moch.key); + } + return { moch, error }; + }) + })) + .then(results => processMochResults(streams, config, results)); +} + +export async function resolve(parameters) { + const moch = MochOptions[parameters.mochKey]; + if (!moch) { + return Promise.reject(new Error(`Not a valid moch provider: ${parameters.mochKey}`)); + } + + if (!parameters.apiKey || !parameters.infohash || !parameters.cachedEntryInfo) { + return Promise.reject(new Error("No valid parameters passed")); + } + const id = `${parameters.ip}_${parameters.mochKey}_${parameters.apiKey}_${parameters.infohash}_${parameters.fileIndex}`; + const method = () => timeout(RESOLVE_TIMEOUT, cacheWrapResolvedUrl(id, () => moch.instance.resolve(parameters))) + .catch(error => { + console.warn(error); + return StaticResponse.FAILED_UNEXPECTED; + }) + .then(url => isStaticUrl(url) ? `${parameters.host}/${url}` : url); + const unrestrictQueue = unrestrictQueues[moch.key]; + return new Promise(((resolve, reject) => { + unrestrictQueue.push({ id, method }, (error, result) => result ? resolve(result) : reject(error)); + })); +} + +export async function getMochCatalog(mochKey, config) { + const moch = MochOptions[mochKey]; + if (!moch) { + return Promise.reject(new Error(`Not a valid moch provider: ${mochKey}`)); + } + if (isInvalidToken(config[mochKey], mochKey)) { + return Promise.reject(new Error(`Invalid API key for moch provider: ${mochKey}`)); + } + return moch.instance.getCatalog(config[moch.key], config.skip, config.ip) + .catch(rawError => { + const commonError = moch.instance.toCommonError(rawError); + if (commonError === BadTokenError) { + blackListToken(config[moch.key], moch.key); + } + return commonError ? [] : Promise.reject(rawError); + }); +} + +export async function getMochItemMeta(mochKey, itemId, config) { + const moch = MochOptions[mochKey]; + if (!moch) { + return Promise.reject(new Error(`Not a valid moch provider: ${mochKey}`)); + } + + return moch.instance.getItemMeta(itemId, config[moch.key], config.ip) + .then(meta => enrichMeta(meta)) + .then(meta => { + meta.videos.forEach(video => video.streams.forEach(stream => { + if (!stream.url.startsWith('http')) { + stream.url = `${config.host}/${moch.key}/${stream.url}/${streamFilename(video)}` + } + stream.behaviorHints = { bingeGroup: itemId } + })) + return meta; + }); +} + +function processMochResults(streams, config, results) { + const errorResults = results + .map(result => errorStreamResponse(result.moch.key, result.error, config)) + .filter(errorResponse => errorResponse); + if (errorResults.length) { + return errorResults; + } + + const includeTorrentLinks = options.includeTorrentLinks(config); + const excludeDownloadLinks = options.excludeDownloadLinks(config); + const mochResults = results.filter(result => result?.mochStreams); + + const cachedStreams = mochResults + .reduce((resultStreams, mochResult) => populateCachedLinks(resultStreams, mochResult, config), streams); + const resultStreams = excludeDownloadLinks ? cachedStreams : populateDownloadLinks(cachedStreams, mochResults, config); + return includeTorrentLinks ? resultStreams : resultStreams.filter(stream => stream.url); +} + +function populateCachedLinks(streams, mochResult, config) { + return streams.map(stream => { + const cachedEntry = stream.infohash && mochResult.mochStreams[stream.infohash]; + if (cachedEntry?.cached) { + return { + name: `[${mochResult.moch.shortName}+] ${stream.name}`, + title: stream.title, + url: `${config.host}/${mochResult.moch.key}/${cachedEntry.url}/${streamFilename(stream)}`, + behaviorHints: stream.behaviorHints + }; + } + return stream; + }); +} + +function populateDownloadLinks(streams, mochResults, config) { + const torrentStreams = streams.filter(stream => stream.infohash); + const seededStreams = streams.filter(stream => !stream.title.includes('👤 0')); + torrentStreams.forEach(stream => mochResults.forEach(mochResult => { + const cachedEntry = mochResult.mochStreams[stream.infohash]; + const isCached = cachedEntry?.cached; + if (!isCached && isHealthyStreamForDebrid(seededStreams, stream)) { + streams.push({ + name: `[${mochResult.moch.shortName} download] ${stream.name}`, + title: stream.title, + url: `${config.host}/${mochResult.moch.key}/${cachedEntry.url}/${streamFilename(stream)}`, + behaviorHints: stream.behaviorHints + }) + } + })); + return streams; +} + +function isHealthyStreamForDebrid(streams, stream) { + const isZeroSeeders = stream.title.includes('👤 0'); + const is4kStream = stream.name.includes('4k'); + const isNotEnoughOptions = streams.length <= 5; + return !isZeroSeeders || is4kStream || isNotEnoughOptions; +} + +function isInvalidToken(token, mochKey) { + return token.length < MIN_API_KEY_SYMBOLS || TOKEN_BLACKLIST.includes(`${mochKey}|${token}`); +} + +function blackListToken(token, mochKey) { + const tokenKey = `${mochKey}|${token}`; + console.log(`Blacklisting invalid token: ${tokenKey}`) + TOKEN_BLACKLIST.push(tokenKey); +} + +function errorStreamResponse(mochKey, error, config) { + if (error === BadTokenError) { + return { + name: `Torrentio\n${MochOptions[mochKey].shortName} error`, + title: `Invalid ${MochOptions[mochKey].name} ApiKey/Token!`, + url: `${config.host}/${StaticResponse.FAILED_ACCESS}` + }; + } + if (error === AccessDeniedError) { + return { + name: `Torrentio\n${MochOptions[mochKey].shortName} error`, + title: `Expired/invalid ${MochOptions[mochKey].name} subscription!`, + url: `${config.host}/${StaticResponse.FAILED_ACCESS}` + }; + } + return undefined; +} diff --git a/src/node/addon-jackett/src/moch/mochHelper.js b/src/node/addon-jackett/src/moch/mochHelper.js new file mode 100644 index 0000000..396c9fb --- /dev/null +++ b/src/node/addon-jackett/src/moch/mochHelper.js @@ -0,0 +1,36 @@ +const METAHUB_URL = 'https://images.metahub.space' +export const BadTokenError = { code: 'BAD_TOKEN' } +export const AccessDeniedError = { code: 'ACCESS_DENIED' } + +export function chunkArray(arr, size) { + return arr.length > size + ? [arr.slice(0, size), ...chunkArray(arr.slice(size), size)] + : [arr]; +} + +export function streamFilename(stream) { + const titleParts = stream.title.replace(/\n👤.*/s, '').split('\n'); + const filename = titleParts.pop().split('/').pop(); + return encodeURIComponent(filename) +} + +export async function enrichMeta(imdbId) { + return { + id: imdbId, + thumbnail: `${METAHUB_URL}/background/small/${imdbId}/img` + }; +} + +export function sameFilename(filename, expectedFilename) { + const offset = filename.length - expectedFilename.length; + for (let i = 0; i < expectedFilename.length; i++) { + if (filename[offset + i] !== expectedFilename[i] && expectedFilename[i] !== '�') { + return false; + } + } + return true; +} + +function mostCommonValue(array) { + return array.sort((a, b) => array.filter(v => v === a).length - array.filter(v => v === b).length).pop(); +} diff --git a/src/node/addon-jackett/src/moch/offcloud.js b/src/node/addon-jackett/src/moch/offcloud.js new file mode 100644 index 0000000..c919a2b --- /dev/null +++ b/src/node/addon-jackett/src/moch/offcloud.js @@ -0,0 +1,186 @@ +import magnet from 'magnet-uri'; +import OffcloudClient from 'offcloud-api'; +import { isVideo } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { Type } from '../lib/types.js'; +import { chunkArray, BadTokenError, sameFilename } from './mochHelper.js'; +import StaticResponse from './static.js'; + +const KEY = 'offcloud'; + +export async function getCachedStreams(streams, apiKey) { + const options = await getDefaultOptions(); + const OC = new OffcloudClient(apiKey, options); + const hashBatches = chunkArray(streams.map(stream => stream.infohash), 100); + const available = await Promise.all(hashBatches.map(hashes => OC.instant.cache(hashes))) + .then(results => results.map(result => result.cachedItems)) + .then(results => results.reduce((all, result) => all.concat(result), [])) + .catch(error => { + if (toCommonError(error)) { + return Promise.reject(error); + } + console.warn('Failed Offcloud cached torrent availability request:', error); + return undefined; + }); + return available && streams + .reduce((mochStreams, stream) => { + const isCached = available.includes(stream.infohash); + const streamTitleParts = stream.title.replace(/\n👤.*/s, '').split('\n'); + const fileName = streamTitleParts[streamTitleParts.length - 1]; + const fileIndex = streamTitleParts.length === 2 ? stream.fileIdx : null; + const encodedFileName = encodeURIComponent(fileName); + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/${encodedFileName}/${fileIndex}`, + cached: isCached + }; + return mochStreams; + }, {}) +} + +export async function getCatalog(apiKey, offset = 0) { + if (offset > 0) { + return []; + } + const options = await getDefaultOptions(); + const OC = new OffcloudClient(apiKey, options); + return OC.cloud.history() + .then(torrents => torrents) + .then(torrents => (torrents || []) + .map(torrent => ({ + id: `${KEY}:${torrent.requestId}`, + type: Type.OTHER, + name: torrent.fileName + }))); +} + +export async function getItemMeta(itemId, apiKey, ip) { + const options = await getDefaultOptions(ip); + const OC = new OffcloudClient(apiKey, options); + const torrents = await OC.cloud.history(); + const torrent = torrents.find(torrent => torrent.requestId === itemId) + const infohash = torrent && magnet.decode(torrent.originalLink).infohash + const createDate = torrent ? new Date(torrent.createdOn) : new Date(); + return _getFileUrls(OC, torrent) + .then(files => ({ + id: `${KEY}:${itemId}`, + type: Type.OTHER, + name: torrent.name, + infohash: infohash, + videos: files + .filter(file => isVideo(file)) + .map((file, index) => ({ + id: `${KEY}:${itemId}:${index}`, + title: file.split('/').pop(), + released: new Date(createDate.getTime() - index).toISOString(), + streams: [{ url: file }] + })) + })) +} + +export async function resolve({ ip, apiKey, infohash, cachedEntryInfo, fileIndex }) { + console.log(`Unrestricting Offcloud ${infohash} [${fileIndex}]`); + const options = await getDefaultOptions(ip); + const OC = new OffcloudClient(apiKey, options); + + return _resolve(OC, infohash, cachedEntryInfo, fileIndex) + .catch(error => { + if (errorExpiredSubscriptionError(error)) { + console.log(`Access denied to Offcloud ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } + return Promise.reject(`Failed Offcloud adding torrent ${JSON.stringify(error)}`); + }); +} + +async function _resolve(OC, infohash, cachedEntryInfo, fileIndex) { + const torrent = await _createOrFindTorrent(OC, infohash) + .then(info => info.requestId ? OC.cloud.status(info.requestId) : Promise.resolve(info)) + .then(info => info.status || info); + if (torrent && statusReady(torrent)) { + return _unrestrictLink(OC, infohash, torrent, cachedEntryInfo, fileIndex); + } else if (torrent && statusDownloading(torrent)) { + console.log(`Downloading to Offcloud ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } else if (torrent && statusError(torrent)) { + console.log(`Retry failed download in Offcloud ${infohash} [${fileIndex}]...`); + return _retryCreateTorrent(OC, infohash, cachedEntryInfo, fileIndex); + } + + return Promise.reject(`Failed Offcloud adding torrent ${JSON.stringify(torrent)}`); +} + +async function _createOrFindTorrent(OC, infohash) { + return _findTorrent(OC, infohash) + .catch(() => _createTorrent(OC, infohash)); +} + +async function _findTorrent(OC, infohash) { + const torrents = await OC.cloud.history(); + const foundTorrents = torrents.filter(torrent => torrent.originalLink.toLowerCase().includes(infohash)); + const nonFailedTorrent = foundTorrents.find(torrent => !statusError(torrent)); + const foundTorrent = nonFailedTorrent || foundTorrents[0]; + return foundTorrent || Promise.reject('No recent torrent found'); +} + +async function _createTorrent(OC, infohash) { + const magnetLink = await getMagnetLink(infohash); + return OC.cloud.download(magnetLink) +} + +async function _retryCreateTorrent(OC, infohash, cachedEntryInfo, fileIndex) { + const newTorrent = await _createTorrent(OC, infohash); + return newTorrent && statusReady(newTorrent.status) + ? _unrestrictLink(OC, infohash, newTorrent, cachedEntryInfo, fileIndex) + : StaticResponse.FAILED_DOWNLOAD; +} + +async function _unrestrictLink(OC, infohash, torrent, cachedEntryInfo, fileIndex) { + const targetFileName = decodeURIComponent(cachedEntryInfo); + const files = await _getFileUrls(OC, torrent) + const targetFile = files.find(file => sameFilename(targetFileName, file.split('/').pop())) + || files.find(file => isVideo(file)) + || files.pop(); + + if (!targetFile) { + return Promise.reject(`No Offcloud links found for index ${fileIndex} in: ${JSON.stringify(torrent)}`); + } + console.log(`Unrestricted Offcloud ${infohash} [${fileIndex}] to ${targetFile}`); + return targetFile; +} + +async function _getFileUrls(OC, torrent) { + return OC.cloud.explore(torrent.requestId) + .catch(error => { + if (error === 'Bad archive') { + return [`https://${torrent.server}.offcloud.com/cloud/download/${torrent.requestId}/${torrent.fileName}`]; + } + throw error; + }) +} + +async function getDefaultOptions(ip) { + return { ip, timeout: 10000 }; +} + +export function toCommonError(error) { + if (error?.error === 'NOAUTH' || error?.message?.startsWith('Cannot read property')) { + return BadTokenError; + } + return undefined; +} + +function statusDownloading(torrent) { + return ['downloading', 'created'].includes(torrent.status); +} + +function statusError(torrent) { + return ['error', 'canceled'].includes(torrent.status); +} + +function statusReady(torrent) { + return torrent.status === 'downloaded'; +} + +function errorExpiredSubscriptionError(error) { + return error?.includes && (error.includes('not_available') || error.includes('NOAUTH') || error.includes('premium membership')); +} diff --git a/addon/moch/options.js b/src/node/addon-jackett/src/moch/options.js similarity index 100% rename from addon/moch/options.js rename to src/node/addon-jackett/src/moch/options.js diff --git a/src/node/addon-jackett/src/moch/premiumize.js b/src/node/addon-jackett/src/moch/premiumize.js new file mode 100644 index 0000000..92f13c8 --- /dev/null +++ b/src/node/addon-jackett/src/moch/premiumize.js @@ -0,0 +1,195 @@ +import magnet from 'magnet-uri'; +import PremiumizeClient from 'premiumize-api'; +import { isVideo, isArchive } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { Type } from '../lib/types.js'; +import { BadTokenError, chunkArray, sameFilename } from './mochHelper.js'; +import StaticResponse from './static.js'; + +const KEY = 'premiumize'; + +export async function getCachedStreams(streams, apiKey) { + const options = await getDefaultOptions(); + const PM = new PremiumizeClient(apiKey, options); + return Promise.all(chunkArray(streams, 100) + .map(chunkedStreams => _getCachedStreams(PM, apiKey, chunkedStreams))) + .then(results => results.reduce((all, result) => Object.assign(all, result), {})); +} + +async function _getCachedStreams(PM, apiKey, streams) { + const hashes = streams.map(stream => stream.infohash); + return PM.cache.check(hashes) + .catch(error => { + if (toCommonError(error)) { + return Promise.reject(error); + } + console.warn('Failed Premiumize cached torrent availability request:', error); + return undefined; + }) + .then(available => streams + .reduce((mochStreams, stream, index) => { + const streamTitleParts = stream.title.replace(/\n👤.*/s, '').split('\n'); + const fileName = streamTitleParts[streamTitleParts.length - 1]; + const fileIndex = streamTitleParts.length === 2 ? stream.fileIdx : null; + const encodedFileName = encodeURIComponent(fileName); + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/${encodedFileName}/${fileIndex}`, + cached: available?.response[index] + }; + return mochStreams; + }, {})); +} + +export async function getCatalog(apiKey, offset = 0) { + if (offset > 0) { + return []; + } + const options = await getDefaultOptions(); + const PM = new PremiumizeClient(apiKey, options); + return PM.folder.list() + .then(response => response.content) + .then(torrents => (torrents || []) + .filter(torrent => torrent && torrent.type === 'folder') + .map(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.name + }))); +} + +export async function getItemMeta(itemId, apiKey, ip) { + const options = await getDefaultOptions(); + const PM = new PremiumizeClient(apiKey, options); + const rootFolder = await PM.folder.list(itemId, null); + const infohash = await _findInfoHash(PM, itemId); + return getFolderContents(PM, itemId, ip) + .then(contents => ({ + id: `${KEY}:${itemId}`, + type: Type.OTHER, + name: rootFolder.name, + infohash: infohash, + videos: contents + .map((file, index) => ({ + id: `${KEY}:${file.id}:${index}`, + title: file.name, + released: new Date(file.created_at * 1000 - index).toISOString(), + streams: [{ url: file.link || file.stream_link }] + })) + })) +} + +async function getFolderContents(PM, itemId, ip, folderPrefix = '') { + return PM.folder.list(itemId, null, ip) + .then(response => response.content) + .then(contents => Promise.all(contents + .filter(content => content.type === 'folder') + .map(content => getFolderContents(PM, content.id, ip, [folderPrefix, content.name].join('/')))) + .then(otherContents => otherContents.reduce((a, b) => a.concat(b), [])) + .then(otherContents => contents + .filter(content => content.type === 'file' && isVideo(content.name)) + .map(content => ({ ...content, name: [folderPrefix, content.name].join('/') })) + .concat(otherContents))); +} + +export async function resolve({ ip, isBrowser, apiKey, infohash, cachedEntryInfo, fileIndex }) { + console.log(`Unrestricting Premiumize ${infohash} [${fileIndex}] for IP ${ip} from browser=${isBrowser}`); + const options = await getDefaultOptions(); + const PM = new PremiumizeClient(apiKey, options); + return _getCachedLink(PM, infohash, cachedEntryInfo, fileIndex, ip, isBrowser) + .catch(() => _resolve(PM, infohash, cachedEntryInfo, fileIndex, ip, isBrowser)) + .catch(error => { + if (error?.message?.includes('Account not premium.')) { + console.log(`Access denied to Premiumize ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } + return Promise.reject(`Failed Premiumize adding torrent ${JSON.stringify(error)}`); + }); +} + +async function _resolve(PM, infohash, cachedEntryInfo, fileIndex, ip, isBrowser) { + const torrent = await _createOrFindTorrent(PM, infohash); + if (torrent && statusReady(torrent.status)) { + return _getCachedLink(PM, infohash, cachedEntryInfo, fileIndex, ip, isBrowser); + } else if (torrent && statusDownloading(torrent.status)) { + console.log(`Downloading to Premiumize ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } else if (torrent && statusError(torrent.status)) { + console.log(`Retrying downloading to Premiumize ${infohash} [${fileIndex}]...`); + return _retryCreateTorrent(PM, infohash, cachedEntryInfo, fileIndex); + } + return Promise.reject(`Failed Premiumize adding torrent ${JSON.stringify(torrent)}`); +} + +async function _getCachedLink(PM, infohash, encodedFileName, fileIndex, ip, isBrowser) { + const cachedTorrent = await PM.transfer.directDownload(magnet.encode({ infohash }), ip); + if (cachedTorrent?.content?.length) { + const targetFileName = decodeURIComponent(encodedFileName); + const videos = cachedTorrent.content.filter(file => isVideo(file.path)); + const targetVideo = Number.isInteger(fileIndex) + ? videos.find(video => sameFilename(video.path, targetFileName)) + : videos.sort((a, b) => b.size - a.size)[0]; + if (!targetVideo && videos.every(video => isArchive(video.path))) { + console.log(`Only Premiumize archive is available for [${infohash}] ${fileIndex}`) + return StaticResponse.FAILED_RAR; + } + const streamLink = isBrowser && targetVideo.transcode_status === 'finished' && targetVideo.stream_link; + const unrestrictedLink = streamLink || targetVideo.link; + console.log(`Unrestricted Premiumize ${infohash} [${fileIndex}] to ${unrestrictedLink}`); + return unrestrictedLink; + } + return Promise.reject('No cached entry found'); +} + +async function _createOrFindTorrent(PM, infohash) { + return _findTorrent(PM, infohash) + .catch(() => _createTorrent(PM, infohash)); +} + +async function _findTorrent(PM, infohash) { + const torrents = await PM.transfer.list().then(response => response.transfers); + const foundTorrents = torrents.filter(torrent => torrent.src.toLowerCase().includes(infohash)); + const nonFailedTorrent = foundTorrents.find(torrent => !statusError(torrent.statusCode)); + const foundTorrent = nonFailedTorrent || foundTorrents[0]; + return foundTorrent || Promise.reject('No recent torrent found'); +} + +async function _findInfoHash(PM, itemId) { + const torrents = await PM.transfer.list().then(response => response.transfers); + const foundTorrent = torrents.find(torrent => `${torrent.file_id}` === itemId || `${torrent.folder_id}` === itemId); + return foundTorrent?.src ? magnet.decode(foundTorrent.src).infohash : undefined; +} + +async function _createTorrent(PM, infohash) { + const magnetLink = await getMagnetLink(infohash); + return PM.transfer.create(magnetLink).then(() => _findTorrent(PM, infohash)); +} + +async function _retryCreateTorrent(PM, infohash, encodedFileName, fileIndex) { + const newTorrent = await _createTorrent(PM, infohash).then(() => _findTorrent(PM, infohash)); + return newTorrent && statusReady(newTorrent.status) + ? _getCachedLink(PM, infohash, encodedFileName, fileIndex) + : StaticResponse.FAILED_DOWNLOAD; +} + +export function toCommonError(error) { + if (error && error.message === 'Not logged in.') { + return BadTokenError; + } + return undefined; +} + +function statusError(status) { + return ['deleted', 'error', 'timeout'].includes(status); +} + +function statusDownloading(status) { + return ['waiting', 'queued', 'running'].includes(status); +} + +function statusReady(status) { + return ['finished', 'seeding'].includes(status); +} + +async function getDefaultOptions(ip) { + return { timeout: 5000 }; +} diff --git a/src/node/addon-jackett/src/moch/putio.js b/src/node/addon-jackett/src/moch/putio.js new file mode 100644 index 0000000..dab1bbe --- /dev/null +++ b/src/node/addon-jackett/src/moch/putio.js @@ -0,0 +1,219 @@ +import PutioClient from '@putdotio/api-client' +import { decode } from "magnet-uri"; +import { isVideo } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { delay } from '../lib/promises.js'; +import { Type } from "../lib/types.js"; +import { sameFilename } from "./mochHelper.js"; +import StaticResponse from './static.js'; +const PutioAPI = PutioClient.default; + +const KEY = 'putio'; + +export async function getCachedStreams(streams, apiKey) { + return streams + .reduce((mochStreams, stream) => { + const streamTitleParts = stream.title.replace(/\n👤.*/s, '').split('\n'); + const fileName = streamTitleParts[streamTitleParts.length - 1]; + const fileIndex = streamTitleParts.length === 2 ? stream.fileIdx : null; + const encodedFileName = encodeURIComponent(fileName); + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/${encodedFileName}/${fileIndex}`, + cached: false + }; + return mochStreams; + }, {}); +} + +export async function getCatalog(apiKey, offset = 0) { + if (offset > 0) { + return []; + } + const Putio = createPutioAPI(apiKey) + return Putio.Files.Query(0) + .then(response => response?.body?.files) + .then(files => (files || []) + .map(file => ({ + id: `${KEY}:${file.id}`, + type: Type.OTHER, + name: file.name + }))); +} + +export async function getItemMeta(itemId, apiKey) { + const Putio = createPutioAPI(apiKey) + const infohash = await _findInfoHash(Putio, itemId) + return getFolderContents(Putio, itemId) + .then(contents => ({ + id: `${KEY}:${itemId}`, + type: Type.OTHER, + name: contents.name, + infohash: infohash, + videos: contents + .map((file, index) => ({ + id: `${KEY}:${file.id}:${index}`, + title: file.name, + released: new Date(file.created_at).toISOString(), + streams: [{ url: `${apiKey}/null/null/${file.id}` }] + })) + })) +} + +async function getFolderContents(Putio, itemId, folderPrefix = '') { + return await Putio.Files.Query(itemId) + .then(response => response?.body) + .then(body => body?.files?.length ? body.files : [body?.parent].filter(x => x)) + .then(contents => Promise.all(contents + .filter(content => content.file_type === 'FOLDER') + .map(content => getFolderContents(Putio, content.id, [folderPrefix, content.name].join('/')))) + .then(otherContents => otherContents.reduce((a, b) => a.concat(b), [])) + .then(otherContents => contents + .filter(content => content.file_type === 'VIDEO') + .map(content => ({ ...content, name: [folderPrefix, content.name].join('/') })) + .concat(otherContents))); +} + +export async function resolve({ ip, apiKey, infohash, cachedEntryInfo, fileIndex }) { + console.log(`Unrestricting Putio ${infohash} [${fileIndex}]`); + const Putio = createPutioAPI(apiKey) + + return _resolve(Putio, infohash, cachedEntryInfo, fileIndex) + .catch(error => { + if (error?.data?.status_code === 401) { + console.log(`Access denied to Putio ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } + return Promise.reject(`Failed Putio adding torrent ${JSON.stringify(error.data || error)}`); + }); +} + +async function _resolve(Putio, infohash, cachedEntryInfo, fileIndex) { + if (infohash === 'null') { + return _unrestrictVideo(Putio, fileIndex); + } + const torrent = await _createOrFindTorrent(Putio, infohash); + if (torrent && statusReady(torrent.status)) { + return _unrestrictLink(Putio, torrent, cachedEntryInfo, fileIndex); + } else if (torrent && statusDownloading(torrent.status)) { + console.log(`Downloading to Putio ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } else if (torrent && statusError(torrent.status)) { + console.log(`Retrying downloading to Putio ${infohash} [${fileIndex}]...`); + return _retryCreateTorrent(Putio, infohash, cachedEntryInfo, fileIndex); + } + return Promise.reject("Failed Putio adding torrent"); +} + +async function _createOrFindTorrent(Putio, infohash) { + return _findTorrent(Putio, infohash) + .catch(() => _createTorrent(Putio, infohash)); +} + +async function _retryCreateTorrent(Putio, infohash, encodedFileName, fileIndex) { + const newTorrent = await _createTorrent(Putio, infohash); + return newTorrent && statusReady(newTorrent.status) + ? _unrestrictLink(Putio, newTorrent, encodedFileName, fileIndex) + : StaticResponse.FAILED_DOWNLOAD; +} + +async function _findTorrent(Putio, infohash) { + const torrents = await Putio.Transfers.Query().then(response => response.data.transfers); + const foundTorrents = torrents.filter(torrent => torrent.source.toLowerCase().includes(infohash)); + const nonFailedTorrent = foundTorrents.find(torrent => !statusError(torrent.status)); + const foundTorrent = nonFailedTorrent || foundTorrents[0]; + if (foundTorrents && !foundTorrents.userfile_exists) { + return await Putio.Transfers.Cancel(foundTorrents.id).then(() => Promise.reject()) + } + return foundTorrent || Promise.reject('No recent torrent found in Putio'); +} + +async function _findInfoHash(Putio, fileId) { + const torrents = await Putio.Transfers.Query().then(response => response?.data?.transfers); + const foundTorrent = torrents.find(torrent => `${torrent.file_id}` === fileId); + return foundTorrent?.source ? decode(foundTorrent.source).infohash : undefined; +} + +async function _createTorrent(Putio, infohash) { + const magnetLink = await getMagnetLink(infohash); + // Add the torrent and then delay for 3 secs for putio to process it and then check it's status. + return Putio.Transfers.Add({ url: magnetLink }) + .then(response => _getNewTorrent(Putio, response.data.transfer.id)); +} + +async function _getNewTorrent(Putio, torrentId, pollCounter = 0, pollRate = 2000, maxPollNumber = 15) { + return Putio.Transfers.Get(torrentId) + .then(response => response.data.transfer) + .then(torrent => statusProcessing(torrent.status) && pollCounter < maxPollNumber + ? delay(pollRate).then(() => _getNewTorrent(Putio, torrentId, pollCounter + 1)) + : torrent); +} + +async function _unrestrictLink(Putio, torrent, encodedFileName, fileIndex) { + const targetVideo = await _getTargetFile(Putio, torrent, encodedFileName, fileIndex); + return _unrestrictVideo(Putio, targetVideo.id); +} + +async function _unrestrictVideo(Putio, videoId) { + const response = await Putio.File.GetStorageURL(videoId); + const downloadUrl = response.data.url + console.log(`Unrestricted Putio [${videoId}] to ${downloadUrl}`); + return downloadUrl; +} + +async function _getTargetFile(Putio, torrent, encodedFileName, fileIndex) { + const targetFileName = decodeURIComponent(encodedFileName); + let targetFile; + let files = await _getFiles(Putio, torrent.file_id); + let videos = []; + + while (!targetFile && files.length) { + const folders = files.filter(file => file.file_type === 'FOLDER'); + videos = videos.concat(files.filter(file => isVideo(file.name))); + // when specific file index is defined search by filename + // when it's not defined find all videos and take the largest one + targetFile = Number.isInteger(fileIndex) + ? videos.find(video => sameFilename(targetFileName, video.name)) + : !folders.length && videos.sort((a, b) => b.size - a.size)[0]; + files = !targetFile + ? await Promise.all(folders.map(folder => _getFiles(Putio, folder.id))) + .then(results => results.reduce((a, b) => a.concat(b), [])) + : []; + } + return targetFile || Promise.reject(`No target file found for Putio [${torrent.hash}] ${targetFileName}`); +} + +async function _getFiles(Putio, fileId) { + const response = await Putio.Files.Query(fileId) + .catch(error => Promise.reject({ ...error.data, path: error.request.path })); + return response.data.files.length + ? response.data.files + : [response.data.parent]; +} + +function createPutioAPI(apiKey) { + const clientId = apiKey.replace(/@.*/, ''); + const token = apiKey.replace(/.*@/, ''); + const Putio = new PutioAPI({ clientID: clientId }); + Putio.setToken(token); + return Putio; +} + +export function toCommonError(error) { + return undefined; +} + +function statusError(status) { + return ['ERROR'].includes(status); +} + +function statusDownloading(status) { + return ['WAITING', 'IN_QUEUE', 'DOWNLOADING'].includes(status); +} + +function statusProcessing(status) { + return ['WAITING', 'IN_QUEUE', 'COMPLETING'].includes(status); +} + +function statusReady(status) { + return ['COMPLETED', 'SEEDING'].includes(status); +} diff --git a/src/node/addon-jackett/src/moch/realdebrid.js b/src/node/addon-jackett/src/moch/realdebrid.js new file mode 100644 index 0000000..7f8bcbf --- /dev/null +++ b/src/node/addon-jackett/src/moch/realdebrid.js @@ -0,0 +1,399 @@ +import RealDebridClient from 'real-debrid-api'; +import { cacheAvailabilityResults, getCachedAvailabilityResults } from '../lib/cache.js'; +import { isVideo, isArchive } from '../lib/extension.js'; +import { getMagnetLink } from '../lib/magnetHelper.js'; +import { delay } from '../lib/promises.js'; +import { Type } from '../lib/types.js'; +import { chunkArray, BadTokenError, AccessDeniedError } from './mochHelper.js'; +import StaticResponse from './static.js'; + +const MIN_SIZE = 5 * 1024 * 1024; // 5 MB +const CATALOG_MAX_PAGE = 1; +const CATALOG_PAGE_SIZE = 100; +const NON_BLACKLIST_ERRORS = ['ESOCKETTIMEDOUT', 'EAI_AGAIN', '504 Gateway Time-out']; +const KEY = 'realdebrid'; +const DEBRID_DOWNLOADS = 'Downloads'; + +export async function getCachedStreams(streams, apiKey) { + const hashes = streams.map(stream => stream.infohash); + const available = await _getInstantAvailable(hashes, apiKey); + return available && streams + .reduce((mochStreams, stream) => { + const cachedEntry = available[stream.infohash]; + const cachedIds = _getCachedFileIds(stream.fileIdx, cachedEntry); + mochStreams[stream.infohash] = { + url: `${apiKey}/${stream.infohash}/null/${stream.fileIdx}`, + cached: !!cachedIds.length + }; + return mochStreams; + }, {}) +} + +async function _getInstantAvailable(hashes, apiKey, retries = 3, maxChunkSize = 150) { + const cachedResults = await getCachedAvailabilityResults(hashes); + const missingHashes = hashes.filter(infohash => !cachedResults[infohash]); + if (!missingHashes.length) { + return cachedResults + } + const options = await getDefaultOptions(); + const RD = new RealDebridClient(apiKey, options); + const hashBatches = chunkArray(missingHashes, maxChunkSize) + return Promise.all(hashBatches.map(batch => RD.torrents.instantAvailability(batch) + .then(response => { + if (typeof response !== 'object') { + return Promise.reject(new Error('RD returned non JSON response: ' + response)); + } + return processAvailabilityResults(response); + }))) + .then(results => results.reduce((all, result) => Object.assign(all, result), {})) + .then(results => cacheAvailabilityResults(results)) + .then(results => Object.assign(cachedResults, results)) + .catch(error => { + if (toCommonError(error)) { + return Promise.reject(error); + } + if (!error && maxChunkSize !== 1) { + // sometimes due to large response size RD responds with an empty body. Reduce chunk size to reduce body + console.log(`Reducing chunk size for availability request: ${hashes[0]}`); + return _getInstantAvailable(hashes, apiKey, retries - 1, Math.ceil(maxChunkSize / 10)); + } + if (retries > 0 && NON_BLACKLIST_ERRORS.some(v => error?.message?.includes(v))) { + return _getInstantAvailable(hashes, apiKey, retries - 1); + } + console.warn(`Failed RealDebrid cached [${hashes[0]}] torrent availability request:`, error.message); + return undefined; + }); +} + +function processAvailabilityResults(availabilityResults) { + const processedResults = {}; + Object.entries(availabilityResults) + .forEach(([infohash, hosterResults]) => processedResults[infohash] = getCachedIds(hosterResults)); + return processedResults; +} + +function getCachedIds(hosterResults) { + if (!hosterResults || Array.isArray(hosterResults)) { + return []; + } + // if not all cached files are videos, then the torrent will be zipped to a rar + return Object.values(hosterResults) + .reduce((a, b) => a.concat(b), []) + .filter(cached => Object.keys(cached).length && Object.values(cached).every(file => isVideo(file.filename))) + .map(cached => Object.keys(cached)) + .sort((a, b) => b.length - a.length) + .filter((cached, index, array) => index === 0 || cached.some(id => !array[0].includes(id))); +} + +function _getCachedFileIds(fileIndex, cachedResults) { + if (!cachedResults || !Array.isArray(cachedResults)) { + return []; + } + + const cachedIds = Number.isInteger(fileIndex) + ? cachedResults.find(ids => ids.includes(`${fileIndex + 1}`)) + : cachedResults[0]; + return cachedIds || []; +} + +export async function getCatalog(apiKey, offset, ip) { + if (offset > 0) { + return []; + } + const options = await getDefaultOptions(ip); + const RD = new RealDebridClient(apiKey, options); + const downloadsMeta = { + id: `${KEY}:${DEBRID_DOWNLOADS}`, + type: Type.OTHER, + name: DEBRID_DOWNLOADS + }; + const torrentMetas = await _getAllTorrents(RD) + .then(torrents => Array.isArray(torrents) ? torrents : []) + .then(torrents => torrents + .filter(torrent => torrent && statusReady(torrent.status)) + .map(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.filename + }))); + return [downloadsMeta].concat(torrentMetas) +} + +export async function getItemMeta(itemId, apiKey, ip) { + const options = await getDefaultOptions(ip); + const RD = new RealDebridClient(apiKey, options); + if (itemId === DEBRID_DOWNLOADS) { + const videos = await _getAllDownloads(RD) + .then(downloads => downloads + .map(download => ({ + id: `${KEY}:${DEBRID_DOWNLOADS}:${download.id}`, + // infohash: allTorrents + // .filter(torrent => (torrent.links || []).find(link => link === download.link)) + // .map(torrent => torrent.hash.toLowerCase())[0], + title: download.filename, + released: new Date(download.generated).toISOString(), + streams: [{ url: download.download }] + }))); + return { + id: `${KEY}:${DEBRID_DOWNLOADS}`, + type: Type.OTHER, + name: DEBRID_DOWNLOADS, + videos: videos + }; + } + return _getTorrentInfo(RD, itemId) + .then(torrent => ({ + id: `${KEY}:${torrent.id}`, + type: Type.OTHER, + name: torrent.filename, + infohash: torrent.hash.toLowerCase(), + videos: torrent.files + .filter(file => file.selected) + .filter(file => isVideo(file.path)) + .map((file, index) => ({ + id: `${KEY}:${torrent.id}:${file.id}`, + title: file.path, + released: new Date(new Date(torrent.added).getTime() - index).toISOString(), + streams: [{ url: `${apiKey}/${torrent.hash.toLowerCase()}/null/${file.id - 1}` }] + })) + })) +} + +async function _getAllTorrents(RD, page = 1) { + return RD.torrents.get(page - 1, page, CATALOG_PAGE_SIZE) + .then(torrents => torrents && torrents.length === CATALOG_PAGE_SIZE && page < CATALOG_MAX_PAGE + ? _getAllTorrents(RD, page + 1) + .then(nextTorrents => torrents.concat(nextTorrents)) + .catch(() => torrents) + : torrents) +} + +async function _getAllDownloads(RD, page = 1) { + return RD.downloads.get(page - 1, page, CATALOG_PAGE_SIZE); +} + +export async function resolve({ ip, isBrowser, apiKey, infohash, fileIndex }) { + console.log(`Unrestricting RealDebrid ${infohash} [${fileIndex}]`); + const options = await getDefaultOptions(ip); + const RD = new RealDebridClient(apiKey, options); + const cachedFileIds = await _resolveCachedFileIds(infohash, fileIndex, apiKey); + + return _resolve(RD, infohash, cachedFileIds, fileIndex, isBrowser) + .catch(error => { + if (accessDeniedError(error)) { + console.log(`Access denied to RealDebrid ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_ACCESS; + } + if (infringingFile(error)) { + console.log(`Infringing file removed from RealDebrid ${infohash} [${fileIndex}]`); + return StaticResponse.FAILED_INFRINGEMENT; + } + return Promise.reject(`Failed RealDebrid adding torrent ${JSON.stringify(error)}`); + }); +} + +async function _resolveCachedFileIds(infohash, fileIndex, apiKey) { + const available = await _getInstantAvailable([infohash], apiKey); + const cachedEntry = available?.[infohash]; + const cachedIds = _getCachedFileIds(fileIndex, cachedEntry); + return cachedIds?.join(','); +} + +async function _resolve(RD, infohash, cachedFileIds, fileIndex, isBrowser) { + const torrentId = await _createOrFindTorrentId(RD, infohash, cachedFileIds, fileIndex); + const torrent = await _getTorrentInfo(RD, torrentId); + if (torrent && statusReady(torrent.status)) { + return _unrestrictLink(RD, torrent, fileIndex, isBrowser); + } else if (torrent && statusDownloading(torrent.status)) { + console.log(`Downloading to RealDebrid ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING; + } else if (torrent && statusMagnetError(torrent.status)) { + console.log(`Failed RealDebrid opening torrent ${infohash} [${fileIndex}] due to magnet error`); + return StaticResponse.FAILED_OPENING; + } else if (torrent && statusError(torrent.status)) { + return _retryCreateTorrent(RD, infohash, fileIndex); + } else if (torrent && (statusWaitingSelection(torrent.status) || statusOpening(torrent.status))) { + console.log(`Trying to select files on RealDebrid ${infohash} [${fileIndex}]...`); + return _selectTorrentFiles(RD, torrent) + .then(() => { + console.log(`Downloading to RealDebrid ${infohash} [${fileIndex}]...`); + return StaticResponse.DOWNLOADING + }) + .catch(error => { + console.log(`Failed RealDebrid opening torrent ${infohash} [${fileIndex}]:`, error); + return StaticResponse.FAILED_OPENING; + }); + } + return Promise.reject(`Failed RealDebrid adding torrent ${JSON.stringify(torrent)}`); +} + +async function _createOrFindTorrentId(RD, infohash, cachedFileIds, fileIndex) { + return _findTorrent(RD, infohash, fileIndex) + .catch(() => _createTorrentId(RD, infohash, cachedFileIds)); +} + +async function _findTorrent(RD, infohash, fileIndex) { + const torrents = await RD.torrents.get(0, 1) || []; + const foundTorrents = torrents + .filter(torrent => torrent.hash.toLowerCase() === infohash) + .filter(torrent => !statusError(torrent.status)); + const foundTorrent = await _findBestFitTorrent(RD, foundTorrents, fileIndex); + return foundTorrent?.id || Promise.reject('No recent torrent found'); +} + +async function _findBestFitTorrent(RD, torrents, fileIndex) { + if (torrents.length === 1) { + return torrents[0]; + } + const torrentInfos = await Promise.all(torrents.map(torrent => _getTorrentInfo(RD, torrent.id))); + const bestFitTorrents = torrentInfos + .filter(torrent => torrent.files.find(f => f.id === fileIndex + 1 && f.selected)) + .sort((a, b) => b.links.length - a.links.length); + return bestFitTorrents[0] || torrents[0]; +} + +async function _getTorrentInfo(RD, torrentId) { + if (!torrentId || typeof torrentId === 'object') { + return torrentId || Promise.reject('No RealDebrid torrentId provided') + } + return RD.torrents.info(torrentId); +} + +async function _createTorrentId(RD, infohash, cachedFileIds) { + const magnetLink = await getMagnetLink(infohash); + const addedMagnet = await RD.torrents.addMagnet(magnetLink); + if (cachedFileIds && !['null', 'undefined'].includes(cachedFileIds)) { + await RD.torrents.selectFiles(addedMagnet.id, cachedFileIds); + } + return addedMagnet.id; +} + +async function _recreateTorrentId(RD, infohash, fileIndex) { + const newTorrentId = await _createTorrentId(RD, infohash); + await _selectTorrentFiles(RD, { id: newTorrentId }, fileIndex); + return newTorrentId; +} + +async function _retryCreateTorrent(RD, infohash, fileIndex) { + console.log(`Retry failed download in RealDebrid ${infohash} [${fileIndex}]...`); + const newTorrentId = await _recreateTorrentId(RD, infohash, fileIndex); + const newTorrent = await _getTorrentInfo(RD, newTorrentId); + return newTorrent && statusReady(newTorrent.status) + ? _unrestrictLink(RD, newTorrent, fileIndex) + : StaticResponse.FAILED_DOWNLOAD; +} + +async function _selectTorrentFiles(RD, torrent, fileIndex) { + torrent = statusWaitingSelection(torrent.status) ? torrent : await _openTorrent(RD, torrent.id); + if (torrent?.files && statusWaitingSelection(torrent.status)) { + const videoFileIds = Number.isInteger(fileIndex) ? `${fileIndex + 1}` : torrent.files + .filter(file => isVideo(file.path)) + .filter(file => file.bytes > MIN_SIZE) + .map(file => file.id) + .join(','); + return RD.torrents.selectFiles(torrent.id, videoFileIds); + } + return Promise.reject('Failed RealDebrid torrent file selection') +} + +async function _openTorrent(RD, torrentId, pollCounter = 0, pollRate = 2000, maxPollNumber = 15) { + return _getTorrentInfo(RD, torrentId) + .then(torrent => torrent && statusOpening(torrent.status) && pollCounter < maxPollNumber + ? delay(pollRate).then(() => _openTorrent(RD, torrentId, pollCounter + 1)) + : torrent); +} + +async function _unrestrictLink(RD, torrent, fileIndex, isBrowser) { + const targetFile = torrent.files.find(file => file.id === fileIndex + 1) + || torrent.files.filter(file => file.selected).sort((a, b) => b.bytes - a.bytes)[0]; + if (!targetFile.selected) { + console.log(`Target RealDebrid file is not downloaded: ${JSON.stringify(targetFile)}`); + await _recreateTorrentId(RD, torrent.hash.toLowerCase(), fileIndex); + return StaticResponse.DOWNLOADING; + } + + const selectedFiles = torrent.files.filter(file => file.selected); + const fileLink = torrent.links.length === 1 + ? torrent.links[0] + : torrent.links[selectedFiles.indexOf(targetFile)]; + + if (!fileLink?.length) { + console.log(`No RealDebrid links found for ${torrent.hash} [${fileIndex}]`); + return _retryCreateTorrent(RD, torrent.hash, fileIndex) + } + + return _unrestrictFileLink(RD, fileLink, torrent, fileIndex, isBrowser); +} + +async function _unrestrictFileLink(RD, fileLink, torrent, fileIndex, isBrowser) { + return RD.unrestrict.link(fileLink) + .then(response => { + if (isArchive(response.download)) { + if (torrent.files.filter(file => file.selected).length > 1) { + return _retryCreateTorrent(RD, torrent.hash, fileIndex) + } + return StaticResponse.FAILED_RAR; + } + // if (isBrowser && response.streamable) { + // return RD.streaming.transcode(response.id) + // .then(streamResponse => streamResponse.apple.full) + // } + return response.download; + }) + .then(unrestrictedLink => { + console.log(`Unrestricted RealDebrid ${torrent.hash} [${fileIndex}] to ${unrestrictedLink}`); + return unrestrictedLink; + }) + .catch(error => { + if (error.code === 19) { + return _retryCreateTorrent(RD, torrent.hash.toLowerCase(), fileIndex); + } + return Promise.reject(error); + }); +} + +export function toCommonError(error) { + if (error && error.code === 8) { + return BadTokenError; + } + if (error && accessDeniedError(error)) { + return AccessDeniedError; + } + return undefined; +} + +function statusError(status) { + return ['error', 'magnet_error'].includes(status); +} + +function statusMagnetError(status) { + return status === 'magnet_error'; +} + +function statusOpening(status) { + return status === 'magnet_conversion'; +} + +function statusWaitingSelection(status) { + return status === 'waiting_files_selection'; +} + +function statusDownloading(status) { + return ['downloading', 'uploading', 'queued'].includes(status); +} + +function statusReady(status) { + return ['downloaded', 'dead'].includes(status); +} + +function accessDeniedError(error) { + return [9, 20].includes(error?.code); +} + +function infringingFile(error) { + return error && error.code === 35; +} + +async function getDefaultOptions(ip) { + return { ip, timeout: 10000 }; +} diff --git a/addon/moch/static.js b/src/node/addon-jackett/src/moch/static.js similarity index 100% rename from addon/moch/static.js rename to src/node/addon-jackett/src/moch/static.js diff --git a/src/node/addon-jackett/src/serverless.js b/src/node/addon-jackett/src/serverless.js new file mode 100644 index 0000000..8eebc7a --- /dev/null +++ b/src/node/addon-jackett/src/serverless.js @@ -0,0 +1,107 @@ +import cors from 'cors'; +import rateLimit from "express-rate-limit"; +import qs from 'querystring'; +import requestIp from 'request-ip'; +import Router from 'router'; +import userAgentParser from 'ua-parser-js'; +import addonInterface from './addon.js'; +import { parseConfiguration } from './lib/configuration.js'; +import landingTemplate from './lib/landingTemplate.js'; +import { manifest } from './lib/manifest.js'; +import * as moch from './moch/moch.js'; + +const router = new Router(); +const limiter = rateLimit({ + windowMs: 60 * 60 * 1000, // 1 hour + max: 3000000, // limit each IP to 300 requests per windowMs + headers: false, + keyGenerator: (req) => requestIp.getClientIp(req) +}) + +router.use(cors()) +router.get('/', (_, res) => { + res.redirect('/configure') + res.end(); +}); + +router.get('/:configuration?/configure', (req, res) => { + const configValues = parseConfiguration(req.params.configuration || ''); + const landingHTML = landingTemplate(manifest(configValues), configValues); + res.setHeader('content-type', 'text/html'); + res.end(landingHTML); +}); + +router.get('/:configuration?/manifest.json', (req, res) => { + const configValues = parseConfiguration(req.params.configuration || ''); + const manifestBuf = JSON.stringify(manifest(configValues)); + res.setHeader('Content-Type', 'application/json; charset=utf-8'); + res.end(manifestBuf) +}); + +router.get('/:configuration?/:resource/:type/:id/:extra?.json', limiter, (req, res, next) => { + const { configuration, resource, type, id } = req.params; + const extra = req.params.extra ? qs.parse(req.url.split('/').pop().slice(0, -5)) : {} + const ip = requestIp.getClientIp(req); + const host = `${req.protocol}://${req.headers.host}`; + const configValues = { ...extra, ...parseConfiguration(configuration), id, type, ip, host }; + addonInterface.get(resource, type, id, configValues) + .then(resp => { + const cacheHeaders = { + cacheMaxAge: 'max-age', + staleRevalidate: 'stale-while-revalidate', + staleError: 'stale-if-error' + }; + const cacheControl = Object.keys(cacheHeaders) + .map(prop => Number.isInteger(resp[prop]) && cacheHeaders[prop] + '=' + resp[prop]) + .filter(val => !!val).join(', '); + + res.setHeader('Cache-Control', `${cacheControl}, public`); + res.setHeader('Content-Type', 'application/json; charset=utf-8'); + res.end(JSON.stringify(resp)); + }) + .catch(err => { + if (err.noHandler) { + if (next) { + next() + } else { + res.writeHead(404); + res.end(JSON.stringify({ err: 'not found' })); + } + } else { + console.error(err); + res.writeHead(500); + res.end(JSON.stringify({ err: 'handler error' })); + } + }); +}); + +router.get('/:moch/:apiKey/:infohash/:cachedEntryInfo/:fileIndex/:filename?', (req, res) => { + const userAgent = req.headers['user-agent'] || ''; + const parameters = { + mochKey: req.params.moch, + apiKey: req.params.apiKey, + infohash: req.params.infohash.toLowerCase(), + fileIndex: isNaN(req.params.fileIndex) ? undefined : parseInt(req.params.fileIndex), + cachedEntryInfo: req.params.cachedEntryInfo, + ip: requestIp.getClientIp(req), + host: `${req.protocol}://${req.headers.host}`, + isBrowser: !userAgent.includes('Stremio') && !!userAgentParser(userAgent).browser.name + } + moch.resolve(parameters) + .then(url => { + res.writeHead(302, { Location: url }); + res.end(); + }) + .catch(error => { + console.log(error); + res.statusCode = 404; + res.end(); + }); +}); + +export default function (req, res) { + router(req, res, function () { + res.statusCode = 404; + res.end(); + }); +}; diff --git a/addon/static/videos/download_failed_v2.mp4 b/src/node/addon-jackett/static/videos/download_failed_v2.mp4 similarity index 100% rename from addon/static/videos/download_failed_v2.mp4 rename to src/node/addon-jackett/static/videos/download_failed_v2.mp4 diff --git a/addon/static/videos/downloading_v2.mp4 b/src/node/addon-jackett/static/videos/downloading_v2.mp4 similarity index 100% rename from addon/static/videos/downloading_v2.mp4 rename to src/node/addon-jackett/static/videos/downloading_v2.mp4 diff --git a/addon/static/videos/failed_access_v2.mp4 b/src/node/addon-jackett/static/videos/failed_access_v2.mp4 similarity index 100% rename from addon/static/videos/failed_access_v2.mp4 rename to src/node/addon-jackett/static/videos/failed_access_v2.mp4 diff --git a/addon/static/videos/failed_infringement_v2.mp4 b/src/node/addon-jackett/static/videos/failed_infringement_v2.mp4 similarity index 100% rename from addon/static/videos/failed_infringement_v2.mp4 rename to src/node/addon-jackett/static/videos/failed_infringement_v2.mp4 diff --git a/addon/static/videos/failed_opening_v2.mp4 b/src/node/addon-jackett/static/videos/failed_opening_v2.mp4 similarity index 100% rename from addon/static/videos/failed_opening_v2.mp4 rename to src/node/addon-jackett/static/videos/failed_opening_v2.mp4 diff --git a/addon/static/videos/failed_rar_v2.mp4 b/src/node/addon-jackett/static/videos/failed_rar_v2.mp4 similarity index 100% rename from addon/static/videos/failed_rar_v2.mp4 rename to src/node/addon-jackett/static/videos/failed_rar_v2.mp4 diff --git a/addon/static/videos/failed_unexpected_v2.mp4 b/src/node/addon-jackett/static/videos/failed_unexpected_v2.mp4 similarity index 100% rename from addon/static/videos/failed_unexpected_v2.mp4 rename to src/node/addon-jackett/static/videos/failed_unexpected_v2.mp4 diff --git a/catalogs/.dockerignore b/src/node/addon/.dockerignore similarity index 100% rename from catalogs/.dockerignore rename to src/node/addon/.dockerignore diff --git a/src/node/addon/.eslintignore b/src/node/addon/.eslintignore new file mode 100644 index 0000000..b0a155e --- /dev/null +++ b/src/node/addon/.eslintignore @@ -0,0 +1 @@ +*.ts \ No newline at end of file diff --git a/src/node/addon/.eslintrc.cjs b/src/node/addon/.eslintrc.cjs new file mode 100644 index 0000000..5aac833 --- /dev/null +++ b/src/node/addon/.eslintrc.cjs @@ -0,0 +1,39 @@ +/** @type {import("eslint").ESLint.Options} */ +module.exports = { + env: { + es2024: true, + node: true, + }, + globals: { + Atomics: "readonly", + SharedArrayBuffer: "readonly", + }, + parserOptions: { + sourceType: "module", + }, + plugins: ["import", "import-helpers"], + rules: { + "default-case": "off", + "import/no-duplicates": "off", + "import/no-extraneous-dependencies": ["off", { devDependencies: ["backend", "frontend", "mobile"] }], + "import/order": "off", + "import-helpers/order-imports": [ + "warn", + { + alphabetize: { + order: "asc", + }, + }, + ], + "lines-between-class-members": ["error", "always", { exceptAfterSingleLine: true }], + "no-continue": "off", + "no-param-reassign": "off", + "no-plusplus": ["error", { allowForLoopAfterthoughts: true }], + "no-restricted-syntax": "off", + "no-unused-expressions": ["off", { allowShortCircuit: true }], + "no-unused-vars": "off", + "no-use-before-define": "off", + "one-var": ["error", { uninitialized: "consecutive" }], + "prefer-destructuring": "warn", + }, +}; \ No newline at end of file diff --git a/src/node/addon/Dockerfile b/src/node/addon/Dockerfile new file mode 100644 index 0000000..78f37af --- /dev/null +++ b/src/node/addon/Dockerfile @@ -0,0 +1,29 @@ +# --- Build Stage --- +FROM node:lts-alpine AS builder + +RUN apk update && apk upgrade && \ + apk add --no-cache git + +WORKDIR /app + +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# --- Runtime Stage --- +FROM node:lts-alpine + +# Install pm2 +RUN npm install pm2 -g + +WORKDIR /app + +ENV NODE_ENV production + +COPY --from=builder /app ./ +RUN npm prune --omit=dev + +EXPOSE 7000 + +ENTRYPOINT [ "pm2-runtime", "start", "ecosystem.config.cjs"] \ No newline at end of file diff --git a/src/node/addon/ecosystem.config.cjs b/src/node/addon/ecosystem.config.cjs new file mode 100644 index 0000000..dff410d --- /dev/null +++ b/src/node/addon/ecosystem.config.cjs @@ -0,0 +1,14 @@ +module.exports = { + apps: [ + { + name: "torrentio-selfhostio", + script: "npm start", + cwd: "/app", + watch: ["./dist/index.cjs"], + autorestart: true, + env: { + ...process.env + }, + }, + ], +}; \ No newline at end of file diff --git a/src/node/addon/esbuild.js b/src/node/addon/esbuild.js new file mode 100644 index 0000000..16bf21e --- /dev/null +++ b/src/node/addon/esbuild.js @@ -0,0 +1,68 @@ +import { build } from "esbuild"; +import { copy } from 'esbuild-plugin-copy'; +import { readFileSync, rmSync } from "fs"; + +const { devDependencies } = JSON.parse(readFileSync("./package.json", "utf8")); + +const start = Date.now(); + +try { + const outdir = "dist"; + + rmSync(outdir, { recursive: true, force: true }); + + build({ + bundle: true, + entryPoints: [ + "./src/index.js", + // "./src/**/*.css", + // "./src/**/*.hbs", + // "./src/**/*.html" + ], + external: [...(devDependencies && Object.keys(devDependencies))], + keepNames: true, + loader: { + ".css": "copy", + ".hbs": "copy", + ".html": "copy", + }, + minify: true, + outbase: "./src", + outdir, + outExtension: { + ".js": ".cjs", + }, + platform: "node", + plugins: [ + { + name: "populate-import-meta", + setup: ({ onLoad }) => { + onLoad({ filter: new RegExp(`${import.meta.dirname}/src/.*.(js|ts)$`) }, args => { + const contents = readFileSync(args.path, "utf8"); + + const transformedContents = contents + .replace(/import\.meta/g, `{dirname:__dirname,filename:__filename}`) + .replace(/import\.meta\.filename/g, "__filename") + .replace(/import\.meta\.dirname/g, "__dirname"); + + return { contents: transformedContents, loader: "default" }; + }); + }, + }, + copy({ + assets: [ + { + from: ['./static/**'], + to: ['./static'], + }, + ], + }) + ], + }).then(() => { + // biome-ignore lint/style/useTemplate: + console.log("⚡ " + "\x1b[32m" + `Done in ${Date.now() - start}ms`); + }); +} catch (e) { + console.log(e); + process.exit(1); +} \ No newline at end of file diff --git a/src/node/addon/jsconfig.json b/src/node/addon/jsconfig.json new file mode 100644 index 0000000..6b1c407 --- /dev/null +++ b/src/node/addon/jsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + "checkJs": true, + "isolatedModules": true, + "lib": ["es6"], + "module": "ESNext", + "moduleResolution": "node", + "outDir": "./dist", + "pretty": true, + "removeComments": true, + "resolveJsonModule": true, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": true, + "target": "ES6", + "types": ["node"], + "typeRoots": ["node_modules/@types", "src/@types"] + }, + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/src/node/addon/package-lock.json b/src/node/addon/package-lock.json new file mode 100644 index 0000000..6b64666 --- /dev/null +++ b/src/node/addon/package-lock.json @@ -0,0 +1,6390 @@ +{ + "name": "selfhostio-addon", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "selfhostio-addon", + "version": "0.0.1", + "dependencies": { + "@putdotio/api-client": "^8.42.0", + "all-debrid-api": "^1.1.0", + "axios": "^1.6.1", + "bottleneck": "^2.19.5", + "cache-manager": "^3.4.4", + "cache-manager-mongodb": "^0.3.0", + "cors": "^2.8.5", + "debrid-link-api": "^1.0.1", + "express-rate-limit": "^6.7.0", + "ip": "^1.1.8", + "magnet-uri": "^6.2.0", + "name-to-imdb": "^3.0.4", + "named-queue": "^2.2.1", + "offcloud-api": "^1.0.2", + "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", + "pg": "^8.11.3", + "pg-hstore": "^2.3.4", + "premiumize-api": "^1.0.3", + "prom-client": "^12.0.0", + "real-debrid-api": "git://github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", + "request-ip": "^3.3.0", + "router": "^1.3.8", + "sequelize": "^6.31.1", + "stremio-addon-sdk": "^1.6.10", + "swagger-stats": "^0.99.7", + "ua-parser-js": "^1.0.36", + "user-agents": "^1.0.1444" + }, + "devDependencies": { + "@types/node": "^20.11.6", + "@types/stremio-addon-sdk": "^1.6.10", + "esbuild": "^0.19.12", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import-helpers": "^1.3.1", + "eslint-plugin-prettier": "^5.1.3", + "lint-staged": "^15.2.0", + "tsx": "^4.7.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@putdotio/api-client": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.42.0.tgz", + "integrity": "sha512-LaFaPMOO8WbvwzUlvuzBcBH9aSpqZIkA6MuoKJPNZ293kFSMZPyXkE/VddVXPNq0f5sp7HzdueCMIPOxcom9hg==", + "dependencies": { + "axios": "^0.21.1", + "event-emitter": "^0.3.5", + "js-base64": "2.6.3", + "qs": "^6.10.3", + "urijs": "^1.19.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@putdotio/api-client/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stremio-addon-sdk": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@types/stremio-addon-sdk/-/stremio-addon-sdk-1.6.11.tgz", + "integrity": "sha512-y0nXwX2gqrWcVYLEvujxqLOm/yZoMu8nLyiw1MthgVuiPp6RVfgWqwpql71MUV5shSfPNsd7EtsiWw2cUFhcWQ==", + "dev": true + }, + "node_modules/@types/validator": { + "version": "13.7.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.3.tgz", + "integrity": "sha512-DNviAE5OUcZ5s+XEQHRhERLg8fOp8gSgvyJ4aaFASx5wwaObm+PBwTIMXiOFm1QrSee5oYwEAYb7LMzX2O88gA==" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/all-debrid-api": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/all-debrid-api/-/all-debrid-api-1.1.0.tgz", + "integrity": "sha512-p6Z8M9UBGkEZK2/qJ2YHBPDyDGW1CEZQ+GCp8IQb4UlC/9GIUgeRPjh2ohoAIBPn3gs6hPvZ8wIVS04lJ3SuHA==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "node_modules/axios": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bep53-range": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bep53-range/-/bep53-range-1.1.1.tgz", + "integrity": "sha512-ct6s33iiwRCUPp9KXnJ4QMWDgHIgaw36caK/5XEQ9L8dCzSQlJt1Vk6VmHh1VD4AlGCAI4C2zmtfItifBBPrhQ==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-manager": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz", + "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==", + "dependencies": { + "async": "3.2.3", + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/cache-manager-mongodb": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/cache-manager-mongodb/-/cache-manager-mongodb-0.3.0.tgz", + "integrity": "sha512-r+piWvu8XD8ceBWflZBEQZKemksoaL1V5zSHWyviVTXiGBSVQAf18b4S1v5UwGZMJnrMk8YNFgpBlugF0nuhvg==", + "dependencies": { + "bluebird": "^3.5.3", + "cache-manager": "^2.9.0", + "lodash": "^4.17.15", + "mongodb": "^3.6.3" + } + }, + "node_modules/cache-manager-mongodb/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + }, + "node_modules/cache-manager-mongodb/node_modules/cache-manager": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz", + "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==", + "dependencies": { + "async": "1.5.2", + "lodash.clonedeep": "4.5.0", + "lru-cache": "4.0.0" + } + }, + "node_modules/cache-manager-mongodb/node_modules/lru-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", + "integrity": "sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==", + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/cache-manager-mongodb/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debrid-link-api": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debrid-link-api/-/debrid-link-api-1.0.1.tgz", + "integrity": "sha512-8b15xUosQ64v1wcN1cGSvt4YXm4dw7gi5hOvqPDOtvsEtlaH2pp/BdjS9/oUh866bPirFVzXrjnIwVK4dRsm3g==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diacritics": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", + "integrity": "sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/esbuild-plugin-copy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz", + "integrity": "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "fs-extra": "^10.0.1", + "globby": "^11.0.3" + }, + "peerDependencies": { + "esbuild": ">= 0.14.0" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/esbuild-plugin-copy/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import-helpers": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-helpers/-/eslint-plugin-import-helpers-1.3.1.tgz", + "integrity": "sha512-MrACDozK6TmTJoCFHD71Ew3r5210Za3zlTrhX+fQGsyvxceaFvAI9AcvZ/8oSU0pZ61G3nDEn6mXY0T4S8cJEg==", + "dev": true, + "peerDependencies": { + "eslint": "5.x - 8.x" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-rate-limit": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", + "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4 || ^5" + } + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/js-base64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz", + "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/lint-staged": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.1.tgz", + "integrity": "sha512-dhwAPnM85VdshybV9FWI/9ghTvMLoQLEXgVMx+ua2DN7mdfzd/tRfoU2yhMcBac0RHkofoxdnnJUokr8s4zKmQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/listr2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magnet-uri": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-6.2.0.tgz", + "integrity": "sha512-O9AgdDwT771fnUj0giPYu/rACpz8173y8UXCSOdLITjOVfBenZ9H9q3FqQmveK+ORUMuD+BkKNSZP8C3+IMAKQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "bep53-range": "^1.1.0", + "thirty-two": "^1.0.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", + "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.1.8", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "node_modules/name-to-imdb": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/name-to-imdb/-/name-to-imdb-3.0.4.tgz", + "integrity": "sha512-OVmDvWoAZso2eHxK51UK7TMIpUpM4LnI3KhvvZe+JkDatEda9WS3/YXZVQnand5skI38shoniOFcyrw08QsNeA==", + "dependencies": { + "diacritics": "~1.3.0", + "named-queue": "^2.1.0", + "needle": "^1.1.2", + "node-fetch": "^2.2.0" + } + }, + "node_modules/name-to-imdb/node_modules/needle": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-1.6.0.tgz", + "integrity": "sha512-ogVK1D/Cgemw2vM1KJN6B83DwcKbDepdkMNtVJcXIe+xoaCOdC+aJHzhEov7xjsY9S7rBIuHP59W1fLsbGqDhA==", + "dependencies": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/named-queue": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/named-queue/-/named-queue-2.2.1.tgz", + "integrity": "sha1-GBRURVNZnVqeQD0N+pN6TODR5qc=" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/offcloud-api": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/offcloud-api/-/offcloud-api-1.0.2.tgz", + "integrity": "sha512-KOxDX+QIUcI/JEwoXoRGK7P+RygSsmCOta/6bEtKeBMc9CDEnb9xgGNDjDFYCxm6U8rvaOhF9NA02i3EisH9Pw==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "dependencies": { + "require-at": "^1.0.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-torrent-title": { + "version": "1.3.0", + "resolved": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", + "integrity": "sha512-Ja7OfUtTb5UKvcjHLh/va3LGZdE/CiJP6it8lxPWf/N9+4aq1hQGwXw1dnJss5dIINQo4ufyDnT2mOIP+ii/pA==", + "license": "MIT", + "dependencies": { + "moment": "^2.24.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + }, + "node_modules/pg-hstore": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", + "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", + "dependencies": { + "underscore": "^1.13.1" + }, + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", + "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", + "dependencies": { + "split2": "^3.1.1" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/premiumize-api": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/premiumize-api/-/premiumize-api-1.0.3.tgz", + "integrity": "sha512-WwJhgmwrKrFFtfjU2EMAaYv602xbe52oaGEwVJXO3z0LZQZ8Cogk9MBADcT0hrFf8MuI7zn5cPMxcJRJPr9cMQ==", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/prettier": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prom-client": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz", + "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==", + "dependencies": { + "tdigest": "^0.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-debrid-api": { + "version": "1.0.1", + "resolved": "git+ssh://git@github.com/TheBeastLT/node-real-debrid.git#d1f7eaa8593b947edbfbc8a92a176448b48ef445", + "integrity": "sha512-P4eoA7/wvDM6/l06OZYX4CBnIzsTNwebdS6fZ4u6LZ3fcJqTzWz3D63xBDZmfcOca/OeUN4ncFld+KxvrNr0oA==", + "license": "MIT", + "dependencies": { + "request": "^2.83.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-ip": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-3.3.0.tgz", + "integrity": "sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==" + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/router": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", + "dependencies": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "node_modules/run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "dependencies": { + "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/sequelize": { + "version": "6.31.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.31.1.tgz", + "integrity": "sha512-cahWtRrYLjqoZP/aurGBoaxn29qQCF4bxkAUPEQ/ozjJjt6mtL4Q113S3N39mQRmX5fgxRbli+bzZARP/N51eg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.7", + "@types/validator": "^13.7.1", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.2", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.35", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^7.0.3", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sequelize/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stremio-addon-linter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/stremio-addon-linter/-/stremio-addon-linter-1.7.0.tgz", + "integrity": "sha512-ck1L1Wp2qvAhvXLj+4Lq1XRn8K3r2gx1i/f+e1W6K0+Et/oIYYDmaIVoh3SvExiNbCBcbJjH9WWEeDYKoqaMqQ==", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/stremio-addon-sdk": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/stremio-addon-sdk/-/stremio-addon-sdk-1.6.10.tgz", + "integrity": "sha512-+U/lDGv73JPZa7OOy8eMb+SkUFhnHuZGBRXuKNeXcz706oDdwC/sQe9r8Wxw2A7Cw05+f/CQIJSl4zIcmKBkGg==", + "dependencies": { + "chalk": "^2.4.2", + "cors": "^2.8.4", + "express": "^4.16.3", + "inquirer": "^6.2.2", + "mkdirp": "^0.5.1", + "node-fetch": "^2.3.0", + "opn": "^5.4.0", + "router": "^1.3.3", + "stremio-addon-linter": "^1.7.0" + }, + "bin": { + "addon-bootstrap": "cli/bootstrap.js" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-stats": { + "version": "0.99.7", + "resolved": "https://registry.npmjs.org/swagger-stats/-/swagger-stats-0.99.7.tgz", + "integrity": "sha512-niP70m99Cwpz/Fyfk8ydul1jM0pOKD6UofSaDzW2Op6o6WYFsuAl/BhVbmLkZWOAZ7IloDVvFj6vaU5zA0xydg==", + "dependencies": { + "axios": "^1.4.0", + "basic-auth": "^2.0.1", + "cookies": "^0.8.0", + "debug": "^4.3.4", + "moment": "^2.29.4", + "path-to-regexp": "^6.2.1", + "qs": "^6.11.2", + "send": "^0.18.0", + "uuid": "^9.0.0" + }, + "peerDependencies": { + "prom-client": ">= 10 <= 14" + } + }, + "node_modules/swagger-stats/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/swagger-stats/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/swagger-stats/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/swagger-stats/node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-stats/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno=", + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsx": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", + "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", + "dev": true, + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, + "node_modules/user-agents": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.9.tgz", + "integrity": "sha512-XxKEWX2bHJzPjvUPRAtw+oPQchReLaR1s59iO/RhBA2TfLLgLUsFvz5MupsejqFfuhXZmZRH8t3kHBvS0ctzGg==", + "dependencies": { + "lodash.clonedeep": "^4.5.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/addon/package.json b/src/node/addon/package.json similarity index 65% rename from addon/package.json rename to src/node/addon/package.json index ef95f2e..0d2d0a7 100644 --- a/addon/package.json +++ b/src/node/addon/package.json @@ -1,13 +1,13 @@ { - "name": "stremio-torrentio", - "version": "1.0.14", - "exports": "./index.js", + "name": "selfhostio-addon", + "version": "0.0.1", "type": "module", "scripts": { - "start": "node index.js" + "build": "node esbuild.js", + "dev": "tsx watch --ignore node_modules src/index.js", + "start": "node dist/index.cjs", + "lint": "eslint . --ext .ts,.js" }, - "author": "TheBeastLT ", - "license": "MIT", "dependencies": { "@putdotio/api-client": "^8.42.0", "all-debrid-api": "^1.1.0", @@ -18,11 +18,11 @@ "cors": "^2.8.5", "debrid-link-api": "^1.0.1", "express-rate-limit": "^6.7.0", + "ip": "^1.1.8", "magnet-uri": "^6.2.0", "name-to-imdb": "^3.0.4", "named-queue": "^2.2.1", "offcloud-api": "^1.0.2", - "p-limit": "^5.0.0", "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#022408972c2a040f846331a912a6a8487746a654", "pg": "^8.11.3", "pg-hstore": "^2.3.4", @@ -36,5 +36,15 @@ "swagger-stats": "^0.99.7", "ua-parser-js": "^1.0.36", "user-agents": "^1.0.1444" + }, + "devDependencies": { + "@types/node": "^20.11.6", + "@types/stremio-addon-sdk": "^1.6.10", + "esbuild": "^0.19.12", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.56.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import-helpers": "^1.3.1", + "tsx": "^4.7.0" } } diff --git a/addon/addon.js b/src/node/addon/src/addon.js similarity index 68% rename from addon/addon.js rename to src/node/addon/src/addon.js index 0492989..85a2f07 100644 --- a/addon/addon.js +++ b/src/node/addon/src/addon.js @@ -1,15 +1,13 @@ +import Bottleneck from 'bottleneck'; import { addonBuilder } from 'stremio-addon-sdk'; -import { Type } from './lib/types.js'; -import { dummyManifest } from './lib/manifest.js'; import { cacheWrapStream } from './lib/cache.js'; -import { toStreamInfo, applyStaticInfo } from './lib/streamInfo.js'; +import { dummyManifest } from './lib/manifest.js'; import * as repository from './lib/repository.js'; import applySorting from './lib/sort.js'; -import applyFilters from './lib/filter.js'; +import { toStreamInfo, applyStaticInfo } from './lib/streamInfo.js'; +import { Type } from './lib/types.js'; import { applyMochs, getMochCatalog, getMochItemMeta } from './moch/moch.js'; import StaticLinks from './moch/static.js'; -import { createNamedQueue } from "./lib/namedQueue.js"; -import pLimit from "p-limit"; const CACHE_MAX_AGE = parseInt(process.env.CACHE_MAX_AGE) || 60 * 60; // 1 hour in seconds const CACHE_MAX_AGE_EMPTY = 60; // 60 seconds @@ -18,27 +16,35 @@ const STALE_REVALIDATE_AGE = 4 * 60 * 60; // 4 hours const STALE_ERROR_AGE = 7 * 24 * 60 * 60; // 7 days const builder = new addonBuilder(dummyManifest()); -const requestQueue = createNamedQueue(Infinity); -const newLimiter = pLimit(30) +const limiter = new Bottleneck({ + maxConcurrent: process.env.LIMIT_MAX_CONCURRENT || 200, + highWater: process.env.LIMIT_QUEUE_SIZE || 220, + strategy: Bottleneck.strategy.OVERFLOW +}); builder.defineStreamHandler((args) => { if (!args.id.match(/tt\d+/i) && !args.id.match(/kitsu:\d+/i)) { return Promise.resolve({ streams: [] }); } - - return requestQueue.wrap(args.id, () => resolveStreams(args)) - .then(streams => applyFilters(streams, args.extra)) - .then(streams => applySorting(streams, args.extra, args.type)) + + return cacheWrapStream(args.id, () => limiter.schedule(() => + streamHandler(args) + .then(records => records + .sort((a, b) => b.torrent.seeders - a.torrent.seeders || b.torrent.uploadDate - a.torrent.uploadDate) + .map(record => toStreamInfo(record))))) + .then(streams => applySorting(streams, args.extra)) .then(streams => applyStaticInfo(streams)) .then(streams => applyMochs(streams, args.extra)) .then(streams => enrichCacheParams(streams)) .catch(error => { + console.log(`Failed request ${args.id}: ${error}`); return Promise.reject(`Failed request ${args.id}: ${error}`); }); }); + builder.defineCatalogHandler((args) => { - const mochKey = args.id.replace("torrentio-", ''); + const mochKey = args.id.replace("selfhostio-", ''); console.log(`Incoming catalog ${args.id} request with skip=${args.extra.skip || 0}`) return getMochCatalog(mochKey, args.extra) .then(metas => ({ @@ -63,15 +69,7 @@ builder.defineMetaHandler((args) => { }); }) -async function resolveStreams(args) { - return cacheWrapStream(args.id, () => newLimiter(() => streamHandler(args) - .then(records => records - .sort((a, b) => b.torrent.seeders - a.torrent.seeders || b.torrent.uploadDate - a.torrent.uploadDate) - .map(record => toStreamInfo(record))))); -} - async function streamHandler(args) { - // console.log(`Pending count: ${newLimiter.pendingCount}, active count: ${newLimiter.activeCount}`, ) if (args.type === Type.MOVIE) { return movieRecordsHandler(args); } else if (args.type === Type.SERIES) { @@ -81,27 +79,25 @@ async function streamHandler(args) { } async function seriesRecordsHandler(args) { - if (args.id.match(/^tt\d+:\d+:\d+$/)) { - const parts = args.id.split(':'); - const imdbId = parts[0]; - const season = parts[1] !== undefined ? parseInt(parts[1], 10) : 1; - const episode = parts[2] !== undefined ? parseInt(parts[2], 10) : 1; - return repository.getImdbIdSeriesEntries(imdbId, season, episode); - } else if (args.id.match(/^kitsu:\d+(?::\d+)?$/i)) { - const parts = args.id.split(':'); - const kitsuId = parts[1]; - const episode = parts[2] !== undefined ? parseInt(parts[2], 10) : undefined; - return episode !== undefined - ? repository.getKitsuIdSeriesEntries(kitsuId, episode) - : repository.getKitsuIdMovieEntries(kitsuId); - } - return Promise.resolve([]); + if (args.id.match(/^tt\d+:\d+:\d+$/)) { + const [imdbId, season = "1", episode = "1"] = args.id.split(':'); + const parsedSeason = parseInt(season, 10); + const parsedEpisode = parseInt(episode, 10); + return repository.getImdbIdSeriesEntries(imdbId, parsedSeason, parsedEpisode); + } else if (args.id.match(/^kitsu:\d+(?::\d+)?$/i)) { + const [, kitsuId, episodePart] = args.id.split(':'); + const episode = episodePart !== undefined ? parseInt(episodePart, 10) : undefined; + return episode !== undefined + ? repository.getKitsuIdSeriesEntries(kitsuId, episode) + : repository.getKitsuIdMovieEntries(kitsuId); + } + return Promise.resolve([]); } async function movieRecordsHandler(args) { if (args.id.match(/^tt\d+$/)) { - const parts = args.id.split(':'); - const imdbId = parts[0]; + const [imdbId] = args.id.split(':'); + console.log("imdbId", imdbId); return repository.getImdbIdMovieEntries(imdbId); } else if (args.id.match(/^kitsu:\d+(?::\d+)?$/i)) { return seriesRecordsHandler(args); diff --git a/addon/index.js b/src/node/addon/src/index.js similarity index 52% rename from addon/index.js rename to src/node/addon/src/index.js index ab0f0a4..78cb30c 100644 --- a/addon/index.js +++ b/src/node/addon/src/index.js @@ -1,22 +1,10 @@ import express from 'express'; -import swStats from 'swagger-stats'; -import serverless from './serverless.js'; -import { manifest } from './lib/manifest.js'; import { initBestTrackers } from './lib/magnetHelper.js'; +import serverless from './serverless.js'; const app = express(); + app.enable('trust proxy'); -app.use(swStats.getMiddleware({ - name: manifest().name, - version: manifest().version, - timelineBucketDuration: 60 * 60 * 1000, - apdexThreshold: 100, - authentication: true, - onAuthenticate: (req, username, password) => { - return username === process.env.METRICS_USER - && password === process.env.METRICS_PASSWORD - }, -})) app.use(express.static('static', { maxAge: '1y' })); app.use((req, res, next) => serverless(req, res, next)); app.listen(process.env.PORT || 7000, () => { diff --git a/addon/lib/cache.js b/src/node/addon/src/lib/cache.js similarity index 85% rename from addon/lib/cache.js rename to src/node/addon/src/lib/cache.js index 72a2c3a..00400c7 100644 --- a/addon/lib/cache.js +++ b/src/node/addon/src/lib/cache.js @@ -2,14 +2,13 @@ import cacheManager from 'cache-manager'; import mangodbStore from 'cache-manager-mongodb'; import { isStaticUrl } from '../moch/static.js'; -const GLOBAL_KEY_PREFIX = 'torrentio-addon'; +const GLOBAL_KEY_PREFIX = 'selfhostio-addon'; const STREAM_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|stream`; const AVAILABILITY_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|availability`; const RESOLVED_URL_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|resolved`; -const STREAM_TTL = process.env.STREAM_TTL || 24 * 60 * 60; // 24 hours -const STREAM_EMPTY_TTL = process.env.STREAM_EMPTY_TTL || 60; // 1 minute -const RESOLVED_URL_TTL = 3 * 60 * 60; // 3 hours +const STREAM_TTL = process.env.STREAM_TTL || 60 * 60; // 1 Hour +const STREAM_EMPTY_TTL = process.env.STREAM_EMPTY_TTL || 30; // 1 minute const AVAILABILITY_TTL = 8 * 60 * 60; // 8 hours const AVAILABILITY_EMPTY_TTL = 30 * 60; // 30 minutes const MESSAGE_VIDEO_URL_TTL = 60; // 1 minutes @@ -29,9 +28,8 @@ function initiateRemoteCache() { store: mangodbStore, uri: MONGO_URI, options: { - collection: 'torrentio_addon_collection', - socketTimeoutMS: 30000, - poolSize: 200, + collection: 'selfhostio_addon_collection', + socketTimeoutMS: 120000, useNewUrlParser: true, useUnifiedTopology: false, ttl: STREAM_EMPTY_TTL @@ -69,8 +67,8 @@ export function cacheWrapStream(id, method) { } export function cacheWrapResolvedUrl(id, method) { - return cacheWrap(remoteCache, `${RESOLVED_URL_KEY_PREFIX}:${id}`, method, { - ttl: (url) => isStaticUrl(url) ? MESSAGE_VIDEO_URL_TTL : RESOLVED_URL_TTL + return cacheWrap(memoryCache, `${RESOLVED_URL_KEY_PREFIX}:${id}`, method, { + ttl: (url) => isStaticUrl(url) ? MESSAGE_VIDEO_URL_TTL : STREAM_TTL }); } diff --git a/src/node/addon/src/lib/configuration.js b/src/node/addon/src/lib/configuration.js new file mode 100644 index 0000000..d283470 --- /dev/null +++ b/src/node/addon/src/lib/configuration.js @@ -0,0 +1,28 @@ +import { DebridOptions } from '../moch/options.js'; +import { QualityFilter, SizeFilter } from './filter.js'; +import { LanguageOptions } from './languages.js'; + +const keysToSplit = [LanguageOptions.key, QualityFilter.key, SizeFilter.key, DebridOptions.key]; +const keysToUppercase = [SizeFilter.key]; + +export function parseConfiguration(configuration) { + if (!configuration) { + return undefined; + } + + const configValues = configuration.split('|') + .reduce((map, next) => { + const [key, value] = next.split('='); + if (key && value) { + map[key.toLowerCase()] = value; + } + return map; + }, {}); + + keysToSplit + .filter(key => configValues[key]) + .forEach(key => configValues[key] = configValues[key].split(',') + .map(value => keysToUppercase.includes(key) ? value.toUpperCase() : value.toLowerCase())) + + return configValues; +} \ No newline at end of file diff --git a/src/node/addon/src/lib/extension.js b/src/node/addon/src/lib/extension.js new file mode 100644 index 0000000..abd1b72 --- /dev/null +++ b/src/node/addon/src/lib/extension.js @@ -0,0 +1,72 @@ +const VIDEO_EXTENSIONS = [ + "3g2", + "3gp", + "avi", + "flv", + "mkv", + "mk3d", + "mov", + "mp2", + "mp4", + "m4v", + "mpe", + "mpeg", + "mpg", + "mpv", + "webm", + "wmv", + "ogm", + "ts", + "m2ts" +]; +const SUBTITLE_EXTENSIONS = [ + "aqt", + "gsub", + "jss", + "sub", + "ttxt", + "pjs", + "psb", + "rt", + "smi", + "slt", + "ssf", + "srt", + "ssa", + "ass", + "usf", + "idx", + "vtt" +]; +const DISK_EXTENSIONS = [ + "iso", + "m2ts", + "ts", + "vob" +] + +const ARCHIVE_EXTENSIONS = [ + "rar", + "zip" +] + +export function isVideo(filename) { + return isExtension(filename, VIDEO_EXTENSIONS); +} + +export function isSubtitle(filename) { + return isExtension(filename, SUBTITLE_EXTENSIONS); +} + +export function isDisk(filename) { + return isExtension(filename, DISK_EXTENSIONS); +} + +export function isArchive(filename) { + return isExtension(filename, ARCHIVE_EXTENSIONS); +} + +export function isExtension(filename, extensions) { + const extensionMatch = filename?.match(/\.(\w{2,4})$/); + return extensionMatch && extensions.includes(extensionMatch[1].toLowerCase()); +} diff --git a/addon/lib/filter.js b/src/node/addon/src/lib/filter.js similarity index 61% rename from addon/lib/filter.js rename to src/node/addon/src/lib/filter.js index b7f6c39..4d0f138 100644 --- a/addon/lib/filter.js +++ b/src/node/addon/src/lib/filter.js @@ -1,97 +1,5 @@ -import { extractProvider, parseSize, extractSize } from './titleHelper.js'; +import { parseSize, extractSize } from './titleHelper.js'; import { Type } from './types.js'; -export const Providers = { - key: 'providers', - options: [ - { - key: 'yts', - label: 'YTS' - }, - { - key: 'eztv', - label: 'EZTV' - }, - { - key: 'rarbg', - label: 'RARBG' - }, - { - key: '1337x', - label: '1337x' - }, - { - key: 'thepiratebay', - label: 'ThePirateBay' - }, - { - key: 'kickasstorrents', - label: 'KickassTorrents' - }, - { - key: 'torrentgalaxy', - label: 'TorrentGalaxy' - }, - { - key: 'magnetdl', - label: 'MagnetDL' - }, - { - key: 'horriblesubs', - label: 'HorribleSubs', - anime: true - }, - { - key: 'nyaasi', - label: 'NyaaSi', - anime: true - }, - { - key: 'tokyotosho', - label: 'TokyoTosho', - anime: true - }, - { - key: 'anidex', - label: 'AniDex', - anime: true - }, - { - key: 'rutor', - label: 'Rutor', - foreign: '🇷🇺' - }, - { - key: 'rutracker', - label: 'Rutracker', - foreign: '🇷🇺' - }, - { - key: 'comando', - label: 'Comando', - foreign: '🇵🇹' - }, - { - key: 'bludv', - label: 'BluDV', - foreign: '🇵🇹' - }, - { - key: 'torrent9', - label: 'Torrent9', - foreign: '🇫🇷' - }, - { - key: 'mejortorrent', - label: 'MejorTorrent', - foreign: '🇪🇸' - }, - { - key: 'cinecalidad', - label: 'Cinecalidad', - foreign: '🇲🇽' - }, - ] -}; export const QualityFilter = { key: 'qualityfilter', options: [ @@ -188,27 +96,14 @@ export const QualityFilter = { export const SizeFilter = { key: 'sizefilter' } -const defaultProviderKeys = Providers.options.map(provider => provider.key); export default function applyFilters(streams, config) { return [ - filterByProvider, filterByQuality, filterBySize ].reduce((filteredStreams, filter) => filter(filteredStreams, config), streams); } -function filterByProvider(streams, config) { - const providers = config.providers || defaultProviderKeys; - if (!providers?.length) { - return streams; - } - return streams.filter(stream => { - const provider = extractProvider(stream.title) - return providers.includes(provider); - }) -} - function filterByQuality(streams, config) { const filters = config[QualityFilter.key]; if (!filters) { @@ -216,7 +111,7 @@ function filterByQuality(streams, config) { } const filterOptions = QualityFilter.options.filter(option => filters.includes(option.key)); return streams.filter(stream => { - const streamQuality = stream.name.split('\n')[1]; + const [ , streamQuality] = stream.name.split('\n'); const bingeGroup = stream.behaviorHints?.bingeGroup; return !filterOptions.some(option => option.test(streamQuality, bingeGroup)); }); diff --git a/addon/lib/landingTemplate.js b/src/node/addon/src/lib/landingTemplate.js similarity index 90% rename from addon/lib/landingTemplate.js rename to src/node/addon/src/lib/landingTemplate.js index ba98f9f..2296c96 100644 --- a/addon/lib/landingTemplate.js +++ b/src/node/addon/src/lib/landingTemplate.js @@ -184,15 +184,13 @@ a.install-link { box-shadow: 0 0 0 2pt rgb(30, 144, 255, 0.7); } `; -import { Providers, QualityFilter, SizeFilter } from './filter.js'; -import { SortOptions } from './sort.js'; -import { LanguageOptions } from './languages.js'; -import { DebridOptions } from '../moch/options.js'; import { MochOptions } from '../moch/moch.js'; -import { PreConfigurations } from './configuration.js'; +import { DebridOptions } from '../moch/options.js'; +import { QualityFilter, SizeFilter } from './filter.js'; +import { LanguageOptions } from './languages.js'; +import { SortOptions } from './sort.js'; export default function landingTemplate(manifest, config = {}) { - const providers = config[Providers.key] || Providers.options.map(provider => provider.key); const sort = config[SortOptions.key] || SortOptions.options.qualitySeeders.key; const languages = config[LanguageOptions.key] || []; const qualityFilters = config[QualityFilter.key] || []; @@ -212,9 +210,7 @@ export default function landingTemplate(manifest, config = {}) { const background = manifest.background || 'https://dl.strem.io/addon-background.jpg'; const logo = manifest.logo || 'https://dl.strem.io/addon-logo.png'; - const providersHTML = Providers.options - .map(provider => ``) - .join('\n'); + const sortOptionsHTML = Object.values(SortOptions.options) .map((option, i) => ``) .join('\n'); @@ -232,10 +228,7 @@ export default function landingTemplate(manifest, config = {}) { .join('\n'); const stylizedTypes = manifest.types .map(t => t[0].toUpperCase() + t.slice(1) + (t !== 'series' ? 's' : '')); - const preConfigurationObject = Object.entries(PreConfigurations) - .map(([key, config]) => `${key}: '${config.serialized}'`) - .join(','); - + return ` @@ -272,11 +265,6 @@ export default function landingTemplate(manifest, config = {}) {
- - -